【问题标题】:How to use non-CA SSL certificate as root certificate in node.js?如何在 node.js 中使用非 CA SSL 证书作为根证书?
【发布时间】:2015-10-18 14:41:19
【问题描述】:

所以我想在 node.js 的 TLS 连接中使用非 CA 证书作为根证书。但是,证书似乎总是被视为 CA。

我正在生成根证书

openssl req -new -nodes -subj "/CN=ClientName1" -keyout client-key.pem -out client-csr.pem
openssl x509 -req -signkey client-key.pem -in client-csr.pem -out client-cert.pem -extfile v3.ext

(类似于服务器)

还有这样的测试证书

openssl req -new -nodes -subj "/CN=ClientName2" -keyout client-key2.pem -out client-csr2.pem
openssl x509 -req -in client-csr2.pem -out client-cert2.pem -extfile v3.ext -CA client-cert.pem -CAkey client-key.pem -CAcreateserial

v3.ext 存在

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE

现在服务器接受 client-cert 和 client-cert2,但是如果我生成由 client-cert2 签名的第三个 (client-cert3),服务器不接受它。因此,无论如何,根证书似乎都被视为 CA。有没有办法绕过它而不故意生成一个一次性的虚拟根证书,该证书仅用于签署一个客户端证书?

我是这样使用它的:

var options = {
    key: fs.readFileSync('server-key.pem'),
    cert: fs.readFileSync('server-cert.pem'),

    requestCert: true,
    rejectUnauthorized: true,

    ca: [fs.readFileSync('client-cert.pem')], 

    port: 15151 
};

var server = tls.createServer(options, function (socket) {});

附:此外,在测试以 root 身份使用 client-cert2.pem 时,服务器不接受使用 client-cert2、client-cert3 或 client-cert 的客户端。

【问题讨论】:

    标签: node.js ssl openssl


    【解决方案1】:

    任何用于签署另一个证书的东西都必须有适当的密钥使用限制。如果使用限制不允许证书作为 CA 工作,则您无法解决它,因为证书链的验证是由客户端完成的,而不是由服务器完成的。

    【讨论】:

    • 我在想 basicConstraints=CA:FALSE 会做到这一点。我还能如何限制使用以不允许生成的证书签名?
    • @Marius:证书由客户端验证。服务器接受什么并不重要,因为它只将证书发送给客户端。
    • 是的,我知道,但是当且仅当它设置了 keyCertSign 标志时,客户端才会接受自签名根证书。也许我的示例不是最好的,因为我使用双向身份验证(服务器和客户端都向另一方提供证书),在我的示例中,服务器拒绝客户端证书或接受它作为具有 keyCertSign 权限的 CA。但问题是反过来的:root 要么必须拥有 keyCertSign,赋予它比我想要的更多的权限,要么它没有并被拒绝。
    • @Marius:确切地说,如果无法验证,客户端会拒绝证书。它是故意这样做的,因为您想要的是使用证书来签署另一个证书,而签名者没有适当的权限 - 即非标准和不安全的行为。如果您想要的可能任何拥有证书的人都可以创建新证书。再说一遍:你想要的东西是不可能的,至少在不通过引入严重的安全漏洞来改变客户端的情况下是不可能的。
    • 实际上我不想使用证书来签署另一个证书 - 相反,我想创建一个无法签署另一个证书的根证书。但是无论我尝试什么,我都无法让客户端接受根证书,除非我创建带有签名权限标志的根证书(keyCertSign)。
    猜你喜欢
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 2021-12-18
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    相关资源
    最近更新 更多