Iva*_*nov 6 ssl openssl node.js 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我用来创建.key和.crt文件的版本.所以我更新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())
Run Code Online (Sandbox Code Playgroud)
难道我做错了什么?为什么它适用于iojs并且不能与nodejs一起使用?
谢谢您的回答!
正如我怀疑的那样,问题出在与 openssl 无关的东西上。
在我的应用程序中,我有一个config.js包含应用程序配置的文件。在其中,我正在读取证书文件并将它们添加到 JavaScript 对象中。
问题是,我正在使用该lodash模块合并 2 个 javascript 对象(其中之一包含证书文件)。
我使用的是旧版本的lodash模块,它似乎使用 aBuffer来合并文件。该版本中的实现与新版本中的实现Buffer不匹配。这导致证书文件合并不正确并导致错误消息。BufferNode.jsERR_SSL_VERSION_OR_CIPHER_MISMATCH
长话短说,将lodash模块更新到最新版本后,证书开始按预期工作。