Node.js服务器返回authorizationError:DEPTH_ZERO_SELF_SIGNED_CERT

问题

我写了一个需要客户端证书的最servlets器,但是它总是拒绝连接,并使用以下authorizationErrorDEPTH_ZERO_SELF_SIGNED_CERT 。 我把下面的步骤放在下面,它们很简单,所以你应该能够在几分钟内重现这个,如果你想“在家里试试”。 这是与Node.js 0.10.24。 难道我做错了什么?

我做了什么

首先,我生成了如下的自签名客户端和服务器证书(来自Nginx的客户端证书authentication的说明),这是一个ssl子目录。

 openssl genrsa -des3 -out ca.key 4096 openssl req -new -x509 -days 365 -key ca.key -out ca.crt openssl genrsa -des3 -out server.key 1024 openssl req -new -key server.key -out server.csr openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt openssl genrsa -des3 -out client.key 1024 openssl req -new -key client.key -out client.csr openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt 

然后,我用Node.js运行下面的程序(即把它放在server.js并运行node server.js )。

 var https = require('https'); var fs = require('fs'); var options = { key: fs.readFileSync('ssl/server.key'), cert: fs.readFileSync('ssl/server.crt'), ca: fs.readFileSync('ssl/ca.crt'), requestCert: true, rejectUnauthorized: false }; https.createServer(options, function (req, res) { if (req.client.authorized) { res.writeHead(200, {"Content-Type":"application/json"}); res.end('{"status":"approved"}'); console.log("Approved Client ", req.client.socket.remoteAddress); } else { res.writeHead(401, {"Content-Type":"application/json"}); res.end('{"status":"denied"}'); console.log('authorizationError:', req.client.authorizationError); console.log("Denied Client " , req.client.socket.remoteAddress); } }).listen(5678); 

最后,我尝试连接curl:

 curl -v -s -k --key ssl/client.key --cert ssl/client.crt https://localhost:5678 

这是authorizationErrorDEPTH_ZERO_SELF_SIGNED_CERT失败的DEPTH_ZERO_SELF_SIGNED_CERT 。 我读过人们有更多的运气设置process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; 而不是使用rejectUnauthorized: false ,但这似乎没有在我的情况有所作为。

快速修复上面是..

 process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"