我已经在 CentOS 6.8 二进制包上安装了 nodejs(最新版 v.7.xx)。我正尝试连接到一个使用相当旧的 TSLv1 加密协议的站点。在与该域握手时(我使用 https 模块),NodeJS 失败并显示以下错误消息:
Error: write EPROTO 140078368692000:error:14077438:SSL
routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal
error:../deps/openssl/openssl/ssl/s23_clnt.c:769:
at exports._errnoException (util.js:1033:11)
at WriteWrap.afterWrite [as oncomplete] (net.js:816:14)
当我添加 secureProtocol 选项(将其设置为 TLSv1_method)时,我得到:
write EPROTO 140528424298272:error:14094438:SSL
routines:ssl3_read_bytes:tlsv1 alert internal
error:../deps/openssl/openssl/ssl/s3_pkt.c:1493:SSL alert number 80
140528424298272:error:1409E0E5:SSL routines:ssl3_write_bytes:ssl
handshake failure:../deps/openssl/openssl/ssl/s3_pkt.c:659:
我的机器上的 OpenSSL 版本(好像它与二进制包有关)当前有以下版本:
OpenSSL 1.0.1e-fips 11 Feb 2013
据我所知,NodeJS 使用它自己的二进制包,所以升级没有帮助(如果可能的话,我想避免这种情况)。
我已经检查了 OpenSSL 的更新日志,似乎没有任何影响 OpenSSL 特定版本的问题(我的意思是握手问题)。