我最近从Comodo购买了一个SSL证书。他们给我发了这些文件:
AddTrustExternalCARoot.crt
PositiveSSLCA2.crt
mydomain.crt
然后我像这样创建了我的私钥和 ca-bundle,
openssl genrsa -des3 -out mydomain.key 1024
cat PositiveSSLCA2.crt AddTrustExternalCARoot.crt > mydomain.ca-bundle
这是我用来将它们放在一起的代码。我在 Chrome 中收到 SSL 连接错误。
var privateKey = fs.readFileSync('./mydomain.key').toString();
var certificate = fs.readFileSync('./mydomain.crt').toString();
var ca = fs.readFileSync('./mydomain.ca-bundle').toString();
var io = require('socket.io').listen(1200, { key:privateKey,cert:certificate,ca:ca });
在颁发证书之前生成私钥。
当 CA 对特定私钥附带的公钥进行签名时,将创建证书。 您生成一个私钥,然后创建一个包含公钥的 CSR。 CA 会发回证书。
在获得证书之前,您必须在某个时候生成私钥 - 您必须使用它。 如果您尝试使用在颁发证书后生成的私钥,它显然不会与证书中的公钥匹配。
此外,节点的tls
模块无法解析证书捆绑包。 您必须在数组中单独传递每个证书。
{
key: fs.readFileSync('mydomain.key'),
cert: fs.readFileSync('mydomain.crt'),
ca: [ fs.readFileSync('AddTrustExternalCARoot.crt'), fs.readFileSync('PositiveSSLCA2.crt') ]
}
文档包含更多详细信息。