NodeJS 获取 SubjectPublicKeyInfo"/>
NodeJS 获取 SubjectPublicKeyInfo
我尝试将此 Go 代码转换为 NodeJS。 Go 代码下载给定主机的 tls 证书,并为主题公钥信息创建哈希。
func Fingerprint(c *x509.Certificate) string {
digest := sha256.Sum256(c.RawSubjectPublicKeyInfo)
return base64.StdEncoding.EncodeToString(digest[:])
}
func fromServer(server string) error {
conn, err := tls.Dial("tcp", server, &tls.Config{
InsecureSkipVerify: true,
})
if err != nil {return err}
for _, cert := range conn.ConnectionState().PeerCertificates {
fmt.Println(Fingerprint(cert))
}
return nil
}
完整代码
我想出了这个代码
function fingerprint(cert) {
const digest = crypto.createHash('sha256').update(cert).digest();
return Buffer.from(digest).toString('base64');
}
function fromServer(server) {
const socket = tls.connect({ host: server.split(':')[0], port: server.split(':')[1], rejectUnauthorized: false }, () => {
const cert = socket.getPeerCertificate();
// console.log(fingerprint(cert.??))
socket.end();
});
}
我的问题是我找不到用于指纹的值。在 Go 中,我用
RawSubjectPublicKeyInfo
记录了fmt.Println(hex.EncodeToString(c.RawSubjectPublicKeyInfo))
,该值是 NodeJS cert.raw.toString('hex')
的一部分,但我没有发现它是“独立的”或转换原始证书的方法。
回答如下:
文档不具体,但
.pubkey
是包含(DER编码)SPKI的Buffer
,这就是您想要的。至少从 dockerhub 的 node:10-alpine 版本开始; 8以下好像没有。
更多推荐
NodeJS 获取 SubjectPublicKeyInfo
发布评论