我们有一个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"
当我测试时,我没有在节点端看到任何输出(错误或其他)。
某人可能出现问题或如何诊断?
谢谢, 吉姆
答案 0 :(得分:0)
仅供参考,我能够成功测试连接(并提供客户端证书)。我使用openssl s_client来诊断问题,并且我在node.js“options”中没有设置“ca”。