我最近以大约5美元的价格从Positive ssl购买了一个个人ssl证书,在激活它并进行验证之后,我终于能够下载我所拥有的证书文件了
www.niknet.ddns.net.ca-bundle
www.niknet.ddns.net.crt
www.niknet.ddns.net.p7b
在我仅使用.key
和.crt
之前
效果很好,但现在我正在使用.ca-bundle
和.crt
文件
这是我用来将这些文件包含到节点js的ssl库中的代码
var forceSsl = require('express-force-ssl');
var httpPort = process.env.PORT || 80;
var httpsPort = process.env.PORT || 443;
var server = http.createServer(app).listen(httpPort);
var server = https.createServer({
secureProtocol : 'TLSv1_2_server_method',
ciphers : "AES128-GCM-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH",
honorCipherOrder : true,
ca: fs.readFileSync(__dirname + '/niknet_ddns_net.ca-bundle'),
cert: fs.readFileSync(__dirname + '/niknet_ddns_net.crt')
},app).listen(httpsPort);
var io = require('socket.io').listen(server);
但是我无法终生获得证书才能正常工作,我只是遇到此错误
ERR_SSL_VERSION_OR_CIPHER_MISMATCH
我一直在阅读其他文章,并尝试在其中添加代码,但注意到了作品 我还在某处读到节点js的ssl或tls库有点过时了,如果这是真的,那么我的证书可能是新的,如果有其他我可以使用的第三方ish ssl库,我现在已经选择不了了< / p>
答案 0 :(得分:0)
对于其他语言,我们对此有很多重复,但是我可以找到的与nodejs最接近的是How to create an HTTPS server in Node.js?,它不是特定的,或者是ERR_SSL_VERSION_OR_CIPHER_MISMATCH with node v7.9.0 https,它没有得到回答。所以:
SSL / TLS服务器(包括 HTTPS服务器)需要私钥AND证书/链(极少数例外,不适用于此处)。您可以使用CA颁发的证书(和链)代替自己创建的(通常是自签名的)证书,只要CA颁发的证书用于同一私钥,但是您仍必须提供私钥。您可以将cert
和key
一起使用,也可以将证书(和可选的链)和密钥组合到PKCS12(也称为PFX)文件中,并使用pfx
。
除了您询问的问题(可能是SO的问题)之外,请勿使用RC4。尽管在实践中平均仍算中等难度/昂贵,但从密码学角度来看,它已被打破,并且大多数使用SSL / TLS / HTTPS的标准现在都禁止使用它,尤其是rfc7465。
答案 1 :(得分:0)
使用波纹管命令使用openssl测试了密钥和crt(在浏览器https://hostname:8888中尝试)..发现缺少确切的密码。
openssl s_server -cert server.crt -key server.key -CAfile octopz.zende.sk.ca-bundle -accept 8888 -www
然后将其添加到nodejs代码中。
var server = https.createServer({
key: privateKey,
cert: certificate,
ca: certificateAuthority,
ciphers: [
"ECDHE-RSA-AES128-SHA256",
"DHE-RSA-AES128-SHA256",
"AES128-GCM-SHA256",
"RC4",
"HIGH",
"!MD5",
"!aNULL"
].join(':'),
}, app);
成功了!