我在我的应用程序中使用了 iojs 和 koa,最近我决定将 iojs 更新到 nodejs v4.4.4。更新非常顺利,我的应用程序很快就可以运行了。问题是我在开发机器上使用的是自签名 SSL 证书,更新到 nodejs 后,当我尝试访问该网站时收到以下消息:
This site can’t provide a secure connection
localhost uses an unsupported protocol.
ERR_SSL_VERSION_OR_CIPHER_MISMATCH
The client and server don't support a common SSL protocol version or cipher suite. This is likely to be caused when the server needs RC4, which is no longer considered secure.
我正在使用 nvm
,所以我尝试切换到 iojs,网站又能正常工作了。
经过一些阅读我发现我必须将 openssl
更新到版本 1.0.2g
而不是我的 1.0.1g
用于创建 .key
和 .crt
文件。所以我更新了 openssl
并生成了新的 key 和证书文件,如下所示:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout/etc/apache2/ssl/apache.key -out/etc/apache2/ssl/apache.crt
遗憾的是,这并没有解决问题。
这是我用来在服务器上设置 https 的代码:
let sslOptions = {
key: fs.readFileSync('/etc/apache2/ssl/apache.key'),
cert: fs.readFileSync('/etc/apache2/ssl/apache.crt')
};
let server = require('https').createServer(sslOptions, app.callback())
我做错了什么吗?为什么用iojs可以用,用nodejs不行?
最佳答案
从报错信息来看,自签名证书没有问题。但是提供 ssl 连接的“服务器”不支持协议(protocol)版本和密码套件的适当组合。
openssl s_client -connect localhost:443
或更详细
openssl s_client -connect localhost:443 -debug
可能会告诉您在 ssl 握手期间出了什么问题。
您还可以找到名为 sslscan 的工具提供了哪些组合
apt-get install sslscan
sslscan localhost:443
sslscan localhost:443 | grep Accepted
最后,您需要通过提供更多 ssloptions 来配置 https 服务器提供的密码套件。
关于node.js - 从 iojs 升级到 nodejs v4.4.4 后,自签名 SSL 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37139718/