我目前在Ubuntu 12.04上遇到OpenSSL的已知问题。这个问题已经在Debian中修复了,我希望它很快就会在Ubuntu中修复。但是,与此同时,我需要一种解决方法。
因此可以在Node中禁用TLS1并具有等同于tls1
开关的内容:
openssl s_client -tls1 -connect evernote.com:443
这是一个简单的Node.js脚本来复制问题(在Ubuntu 12.04 w / OpenSSL 1.0.1上)
var https = require('https');
https.get({
host: 'www.evernote.com',
path: '/',
port: 443
}, function (res) {
console.log('Success!');
});
答案 0 :(得分:5)
根据documentation和来源(1,2)判断,应该可以将选项对象传递给request
,其中包含类似
options = { secureProtocol: 'TLSv1_method' }
以便为此特定连接使用TLSv1(以及那个)。
默认使用OpenSSL的SSLv23_method,这意味着使用双方可能理解的最高TLS / SSL版本。
虽然在OpenSSL本身是可能的,但是我无法将node.js中的特定TLS版本(例如"使用最高版本,但从不使用此版本")列入黑名单,这样做的必要标志不会在node.js本身中导出。
答案 1 :(得分:2)
我遇到了一个错误,我无法通过节点通过ssl连接到livefilestore.com。以下是修正它的原因:
var https = require('https');
var HTTPS_AGENT = new https.Agent({
secureProtocol: 'SSLv3_method' // default is SSLv23_method
});
var req_opts = {...};
req_opts.agent = HTTPS_AGENT;
https.request(req_opts, function(res) { ... });
有趣的是,我能够使用更新版本的libopenssl重现curl中的错误,但是我的旧盒子没有重现这个问题。我能够在Ubuntu和Gentoo上重现。在使用curl进行实验时,使用-2总是中断(不同但不挂起,只报告不支持),-3从未重现问题。我不知道这是否相关。如果没有指定-3,它会尝试并且无法进行SSLv3握手。奇怪。