在node.js中启用双向(客户端验证的)SSL?

时间:2018-02-10 18:16:29

标签: node.js express

我们有一个node.js / express.js应用程序,目前只使用单向(服务器验证)SSL,并且工作正常,但是现在,我正在尝试启用它来使用双向/客户端-authenticated 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点击它时,我得到一个正确的(虚拟)响应消息。

所以我添加了一个" 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 peer无法协商一组可接受的安全参数。错误代码:SSL_ERROR_HANDSHAKE_FAILURE_ALERT"

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

某人可能出现问题或如何诊断?

谢谢, 吉姆

1 个答案:

答案 0 :(得分:0)

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