在node.js中禁用TLS 1.1?

时间:2012-05-27 13:08:54

标签: node.js ubuntu ssl openssl ubuntu-12.04

我目前在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!');
  });

2 个答案:

答案 0 :(得分:5)

根据documentation和来源(12)判断,应该可以将选项对象传递给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握手。奇怪。