5

我目前在 Ubuntu 12.04 上遇到 OpenSSL 的一个已知问题。这个问题已经在 Debian 中得到修复,我希望它也能在 Ubuntu 中得到修复。但是,与此同时,我需要一个解决方法。

那么是否可以在 Node 中禁用 TLS1 并具有等效于tls1switch 的功能:

openssl s_client -tls1 -connect evernote.com:443

这是一个简单的 Node.js 脚本来复制问题(在带有 OpenSSL 1.0.1 的 Ubuntu 12.04 上)

var https = require('https');
https.get({
    host: 'www.evernote.com',
    path: '/',
    port: 443
  }, function (res) {
    console.log('Success!');
  });
4

2 回答 2

5

文档和来源(12)来看,应该可以将选项对象传递给request包含类似

options = { secureProtocol: 'TLSv1_method' }

为了对这个特定的连接使用 TLSv1(仅此而已)。

默认使用 OpenSSL 的 SSLv23_method,即使用双方可能理解的最高 TLS/SSL 版本。

尽管在 OpenSSL 本身中是可能的,但据我所知,在 node.js 中不可能将特定的 TLS 版本(如“尽可能使用最高版本,但从不使用这个”)列入黑名单,这样做的必要标志是未在 node.js 本身中导出。

于 2012-05-27T21:54:09.690 回答
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 握手但失败。奇怪的。

于 2013-05-28T13:57:14.250 回答