【发布时间】: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 的客户端。
【问题讨论】: