从iojs升级到nodejs v4.4.4后,自签名SSL无效

时间:2016-05-10 13:17:23

标签: node.js ssl openssl koa iojs

我在我的应用程序中使用了iojs和koa,最近我决定将iojs更新为nodejs v4.4.4。更新非常顺利,我的应用程序立即运行。问题是我在我的开发机器上使用自签名SSL证书,在我更新到nodejs后,当我尝试访问该网站时收到以下消息:

  

此网站无法提供安全连接

     

localhost使用不受支持的协议。

     

ERR_SSL_VERSION_OR_CIPHER_MISMATCH

     

客户端和服务器不支持常见的SSL协议版本或   密码套件。这很可能是在服务器需要RC4时引起的,   这不再被认为是安全的。

我正在使用nvm所以我尝试切换到iojs并且网站再次运行。

经过一些阅读后,我发现我必须将openssl更新为版本1.0.2g,而不是我用来创建1.0.1g和{{1}的.key文件。所以我更新了.crt并生成了新的密钥和证书文件,如下所示:

openssl

可悲的是,这并未解决问题。

这是我用来在服务器上设置https的代码:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt

我做错了吗?为什么它适用于iojs并且不能与nodejs一起使用?

4 个答案:

答案 0 :(得分:3)

将有一个信任库(密钥库)文件,其中需要注册所有可信证书。您必须在那里注册这个新创建的证书。客户端使用该信任库文件来检查证书是否可信任。

有关详细信息,请参阅以下链接: -

Creating Self Signed Certificates (openssl & keytool)

我希望它有所帮助。

答案 1 :(得分:3)

根据错误消息判断自签名证书没有任何问题。但是提供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服务器提供的密码套件。

请参阅此处https://certsimple.com/blog/a-plus-node-js-ssl

答案 2 :(得分:1)

感谢您的回答!

我怀疑,问题出在与openssl无关的问题上。

在我的应用程序中,我有一个带有应用程序配置的config.js文件。 在其中我正在读取证书文件并将它们添加到javascript对象。

问题是,我使用lodash模块合并了2个javascript对象(其中一个包含证书文件)。

我使用的是lodash模块的旧版本,看起来它使用了Buffer来合并文件。该版本中的Buffer实施与新Buffer版本中的Node.js实施不匹配。这导致证书文件的合并不正确,并导致ERR_SSL_VERSION_OR_CIPHER_MISMATCH错误消息。

长话短说,在将lodash模块更新到最新版本后,证书开始按预期工作。

答案 3 :(得分:0)

我不是NodeJS专家。但似乎您需要在节点服务器上禁用RC4。我认为这就是问题所在。