【问题标题】:node.js + restify - requiring client certificatenode.js + restify - 需要客户端证书
【发布时间】:2012-10-01 08:37:14
【问题描述】:

所以我正在开发一个基本的节点应用程序。客户端将使用 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

显然,这里发生了一些我没有完全跟上进度的事情。会是什么?

== 更新 ==

将 -v 与 curl 一起使用可以让我获得一些额外的信息,包括 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

谢谢。

【问题讨论】:

    标签: node.js https certificate restify


    【解决方案1】:

    从 restify 1.4.4 开始不支持此功能。我相信这将包含在 2.0 版本中,因为我看到代码已添加到 Git 存储库的主分支中。

    【讨论】:

      猜你喜欢
      • 2018-08-11
      • 1970-01-01
      • 2012-10-12
      • 2012-03-11
      • 2020-08-16
      • 2019-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多