我在我的应用程序中使用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版本,而不是我用来创建.key和.crt文件的1.0.1g.所以我更新了openssl并生成了新的密钥和证书文件,如下所示:
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连接的“服务器”不支持协议版本和密码套件的合适组合.
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服务器提供的密码套件.