所以我正在开发一个基本的节点应用程序。客户端将使用SSL连接到它。当我只使用服务器证书时似乎工作正常,但是当我尝试要求客户端证书时,无论我向它扔什么,它都会继续工作。
我在本网站上发现了与此相关的问题,但其中包含的答案似乎对我不起作用。 Here's one.
以下是相关代码:
var restify=require('restify');
var fs=require('fs');
var server=restify.createServer({
certificate: fs.readFileSync('../certs/server.crt'),
key: fs.readFileSync('../certs/server.key'),
ca: fs.readFileSync('../certs/ca.crt'),
requestCert: true,
rejectUnauthorized: true,
});
...
server.listen(8080, function() {
console.log('servers up...');
});
我正在使用curl来测试连接,而且几乎任何进来都会导致请求对象被记录到控制台。
我使用的各种curl命令行是:
curl -k https://localhost:8080/hello
curl -k -E user.combined:password https://localhost:8080/hello
我正在使用-k,因为证书是在本地生成的,curl想要验证它们。 (这可能是问题??)
因此,无论我发送到节点实例的是什么,如果用户使用正确的证书(因为它们位于上面的第二个curl命令行中),我得到了我期望的输出。
登录控制台,我看到了:
req = { socket:
{ pair:
_secureEstablished: true,
_isServer: true,
...
_rejectUnauthorized: false,
_requestCert: false,
(further down)
authorized: false
显然,这里有一些事情我不能完全加速。它可能是什么?
== UPDATE ==
在curl中使用-v可以获得一些额外的信息,包括curl输出中的这些信息:
* About to connect() to localhost port 8080 (#0)
* Trying 127.0.0.1... connected
* successfully set certificate verify locations:
* CAfile: none
CApath: /etc/ssl/certs
如上所述,我的ca.crt文件位于(相对)目录../ certs
中谢谢。
答案 0 :(得分:2)
这不支持改善1.4.4。我相信这将包含在2.0版本中,因为我看到代码已添加到Git存储库的主分支中。