最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

NodeJS 获取 SubjectPublicKeyInfo

网站源码admin48浏览0评论

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以下好像没有。

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论