2012-05-27 42 views
4

我目前在Ubuntu 12.04上遇到了OpenSSL的一个已知问题。这个问题已经在Debian中解决了,我预计它也会很快在Ubuntu上得到解决。但是,同时我需要一个解决方法。在node.js中禁用TLS 1.1?

所以是有可能的节点禁用TLS1和有话相当于tls1开关:

openssl s_client -tls1 -connect evernote.com:443 

下面是一个简单的Node.js脚本复制的问题(在Ubuntu12.04瓦特/ OpenSSL的1.0.1 )

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

回答

4

documentation和源(12)来看,应该有可能传递一个选项对象到request包含事端g像

options = { secureProtocol: 'TLSv1_method' } 

为了使用TLSv1(以及那个)为这个特定的连接。

默认情况下使用OpenSSL的SSLv23_method,这意味着使用双方可能理解的最高TLS/SSL版本。

尽管在OpenSSL本身中是可能的,但是我无法在node.js中将特定的TLS版本列入黑名单(例如在“使用最高版本但可能不是最高版本”),我可以看到,必要的标志这样做不会在node.js本身中导出。

+0

AWESOME逆向工程!太糟糕了,似乎我希望能够做到我需要的东西:(你确定它的工作原理是这样的吗?我尝试了'securevrotocol'的各种值('SSLv2_method',''TLSv1_method'),但似乎我得到(错误:套接字挂断,'在SecurePair.error(tls.js:802:15)'')感谢一百万到目前为止! – jsalonen

+0

我没有得到它的工作,但我认为这基本上只要我们可以提供的信息,谢谢! – jsalonen

+0

是的,抱歉,我没有时间进一步调查,如果我设法找出可能出现的问题,我会在这里发表评论! – emboss

2

我遇到了一个bug,我无法通过节点连接到livelstorestore.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的,但我的大箱子并没有重现该问题。我能够在Ubuntu和Gentoo上重现。在试验curl时,使用-2总是会中断(不同的是,不会挂起,只是报告不支持),而-3永远不会再现问题。我不知道这是否相关。如果不指定-3,它会尝试并且无法执行SSLv3握手。奇怪。