【问题标题】:Enabling 2-way (client-authenticated) SSL in node.js?在 node.js 中启用 2-way (client-authenticated) SSL?
【发布时间】:2018-02-11 04:32:01
【问题描述】:

我们有一个 node.js/express.js 应用程序,目前只使用单向(服务器认证)SSL,并且工作正常,但现在,我正在尝试启用它以使用两向/客户端-经过身份验证的 SSL,但我在执行此操作时遇到问题(节点版本为 8.5.0)。

这是当前应用程序的初始部分,用于设置 SSL 服务器:

if (sslListen) {
    var fs = require('fs');
    var https = require('https');
    // Setup HTTPS
    var options = {
        pfx: fs.readFileSync(SECURITY_DIR + 'server.pfx'),
        passphrase: xxxxx
    };

    logger.log("++++++++ Listen SSL Mode ++++++++");
    var secureServer = https.createServer(options, app)
        .listen(listenPort);
} else {
    logger.log("++++++++ Listen NON-SSL Mode ++++++++");
    app.listen(listenPort, function () {
        logger.log("\n\n2-" + BANNER + "-2\n\n");
    });
}

我们在“/”处有一个测试 URI,当我使用 Firefox 访问该 URI 时,我得到了正确的(虚拟)响应消息。

所以我在选项中添加了“requestCert”:

if (sslListen) {
    var fs = require('fs');
    var https = require('https');
    // Setup HTTPS
    var options = {
        pfx: fs.readFileSync(SECURITY_DIR + 'server.pfx'),
        passphrase: xxxxx,
        requestCert: true
    };

    logger.log("++++++++ Listen SSL Mode ++++++++");
    var secureServer = https.createServer(options, app)
        .listen(listenPort);
} else {
    logger.log("++++++++ Listen NON-SSL Mode ++++++++");
    app.listen(listenPort, function () {
        logger.log("\n\n2-" + BANNER + "-2\n\n");
    });
}

当我使用 Firefox 进行测试时,我进入了一个错误页面:

“安全连接失败

连接到 XXXXXX.dev:4269 时出错。 SSL 对等方无法协商一组可接受的安全参数。错误代码:SSL_ERROR_HANDSHAKE_FAILURE_ALERT"

当我测试时,我在节点端看不到任何输出(错误或其他)。

谁能知道可能是什么问题或如何诊断它?

谢谢, 吉姆

【问题讨论】:

    标签: node.js express


    【解决方案1】:

    仅供参考,我能够成功测试连接(并提供客户端证书)。我使用 openssl s_client 来诊断问题,这是我在 node.js“选项”中没有设置“ca”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-24
      • 2015-03-21
      • 1970-01-01
      • 1970-01-01
      • 2014-07-08
      相关资源
      最近更新 更多