Go语言 使用主机名或pem文件在Nodejs中获取从leaf到root的SSL证书密钥链对

kokeuurv  于 2023-08-01  发布在  Go
关注(0)|答案(1)|浏览(90)

我尝试使用pem或hostname从ssl获取所有证书,但它只返回根证书。
我试着遵循代码,

const conf = {
                insecureSkipVerify: true
            }

            const conn = tls.connect(443, 'www.facebook.com', conf, () => {
                const certs = conn.getPeerCertificate()
                console.log(`\n PeerCertificate: ${JSON.stringify(certs)}`)
            })

            conn.on('error', (err: any) => {
                console.log('Error in Dial', err)
            })

            conn.on('close', () => {
                conn.destroy()
            })

字符串
与pem文件我尝试以下代码块

// get the SSL certificates from x5u url
        const certificates = (await axios.get(x5u)).data as string

        // getting object of a PEM encoded X509 Certificate.
        const certificate = new X509Certificate(certificates)
        console.log('X509Certificate :-', JSON.stringify(certificate.toLegacyObject()))


而不是返回完整的密钥链路径,其仅返回根证书。我正在检查SSL-Checker中的所有叶到根证书
在golang中,它可以很容易地返回所有的证书,但在nodejs中则不然。我在Golang中使用了以下代码,并且运行良好

conf := &tls.Config{
        InsecureSkipVerify: true,
    }

    conn, err := tls.Dial("tcp", "www.smartsensesolutions.com:443", conf)
    if err != nil {
        log.Println("Error in Dial", err)
        return
    }
    defer conn.Close()
    certs := conn.ConnectionState().PeerCertificates

    for _, cert := range certs {
        fmt.Printf("\nDNSNames: %s \n", cert.DNSNames)
        fmt.Printf("Common Name: %s \n", cert.Issuer.CommonName)
        fmt.Printf("Expiry: %s \n", cert.NotAfter.Format("2006-January-02"))
        fmt.Printf("Valid from: %s \n", cert.NotBefore.Format("2006-January-02"))
        fmt.Printf("SerialNumber: %d \n", cert.SerialNumber)
        fmt.Printf("Signature Algorithm: %s \n", cert.SignatureAlgorithm.String())
        fmt.Printf("Issuer Name: %s\n\n", cert.Issuer)
    }


请帮助我在nodejs从主机或pem文件中获取所有SSL密钥链对
我需要以下输出


的数据

js5cn81o

js5cn81o1#

“密钥链对”不是定义的术语,并且没有明确的含义。如果您的意思是 keypair,即公钥 * 和 * 私钥,您无法获得SSL/TLS服务器的私钥或密钥对 * 或 * 在其信任链(又名路径)中使用的各种CA中的任何CA(可能正好是两个,小于两个或多于两个)。
TLSSocket.getPeerCertificate()返回 server(终端实体或叶)证书,而不是根证书。正如文档中明确指出的那样,我猜你没有读过,因为这需要做一些类似于工作的事情,如果你使用getPeerCertificate(true),它会返回一个包含完整链的链表。请参阅我几天前刚刚发布的示例(尽管目的不同)Unable to verify the first certificate in Nodejs while making request and cant install packages using npm
x5u URL仅用于JOSE/JWK,不用于SSL/TLS,并且nodejs中的X509Certificate对象仅包含一个证书,该证书将是提供的数据中的第一个;对于rfc 7517中的x5 u数据,第一个证书不能是根证书。

相关问题