我正在尝试使用 node.js v0.10.5 和 einaros/ws (WebSockets) 模块创建 TLS/SSL 连接,但出现以下错误:
错误:SELF_SIGNED_CERT_IN_CHAIN
我从我自己的 CA 获得证书,这是一个 EJBCA 服务器,版本:EJBCA 4.0.15 (r16671),我在我的客户端中使用以下代码:
define(["ws", "fs"], function (WebSocket, fs) {
"use strict";
return function (jsonRequest) {
var response,
error,
successCallback,
errorCallback,
HB_PFX = "server.domain.com.p12",
HB_CA = "certs/my-ca.pem";
var secureOptions = {
passphrase: "the-passphrase",
pfx: fs.readFileSync(HB_PFX),
ca : [fs.readFileSync(HB_CA)]
};
var sendRequest = function () {
var client = new WebSocket("wss://server.domain.com:8080/draft", secureOptions);
client.on("open", function () {
client.send(jsonRequest);
});
client.on("error", function (e) {
error = e.toString();
console.log(error);
if (errorCallback) {
errorCallback(error);
}
});
client.on("message", function (message) {
response = message;
if (successCallback) {
successCallback(message);
}
});
client.on("close", function (code) {
console.log("Connection closed with code: " + code);
});
};
return {
send: function (callback) {
if (response && !error) {
callback(response);
} else {
successCallback = callback;
}
sendRequest();
return this;
},
ifError: function (callback) {
if (error) {
callback(response);
} else {
errorCallback = callback;
}
return this;
}
};
};
});
p12 存储(PKCS12)由 CA 生成,它包括密钥、我的服务器证书和 CA 证书。
我可以毫无问题地使用浏览器连接到服务器,我只是在第一次连接时被提示接受证书。但是当我尝试与我的客户联系时,我总是会收到该错误。我使用其 FQDN 连接到服务器,而不是 IP 地址。
如果我尝试使用自签名证书(在我的本地计算机中生成并使用而不是 p12 文件的证书),我会收到 DEPTH_ZERO_SELF_SIGNED_CERT 错误。
我在 Mac OS X 10.8.4 上运行。
我几乎尝试了所有排列,甚至将密钥和证书从 PKCS12 文件导出到 PEM 文件,但我得到了完全相同的错误。我还将 CA 证书添加到我可以在我的计算机中找到的所有 cacert 文件中,这些文件如下:
/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/MacOS/itms/java/lib/security/cacerts
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/security/cacerts
/Library/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Contents/Home/jre/lib/security/cacerts
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/security/cacerts
/System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts
/System/Library/Java/Support/Deploy.bundle/Contents/Home/lib/security/cacerts
有谁知道如何解决这个错误并在节点中创建安全连接?