节点js

时间:2018-10-06 16:52:07

标签: node.js ssl server tls1.2

我最近以大约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>

2 个答案:

答案 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颁发的证书用于同一私钥,但是您仍必须提供私钥。您可以将certkey一起使用,也可以将证书(和可选的链)和密钥组合到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);

成功了!