首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >节点错误: SSL23_GET_SERVER_HELLO:unknown协议和SSL3_GET_RECORD:wrong版本号

节点错误: SSL23_GET_SERVER_HELLO:unknown协议和SSL3_GET_RECORD:wrong版本号
EN

Stack Overflow用户
提问于 2014-09-27 18:35:30
回答 1查看 3K关注 0票数 0

好吧,这个问题在过去曾被问过,但没有令人满意的答案,至少在我结束之前是这样的。长话短说,使用curl将数据发布到远程服务器(注意:https),其工作如下:

代码语言:javascript
复制
curl -X POST 'https://a.b.c.d/somewhere/' --data 'somedata' --header "Content-Type: text/turtle" -i

现在,使用节点来做同样的事情的时候到了。我的函数工作得很好,如果我没有使用https模块,而是使用http模块,我会收到一条消息,我必须为https再试一次。因此,我使用https来发出请求,下面的选项如下:

代码语言:javascript
复制
var myOptions = {
    hostname : "a.b.c.d",
    port     : "80",
    path     : "/somewhere/",
    method   : 'POST',
    headers  : {
        'Content-Type'   : 'text/turtle', 
        'Content-Length' : message.length
        },
    secureProtocol : 'SSLv3_method'
};

顺便说一句,在传递参数--sslv3时,我还检查了curl是否正常工作。

但是,使用上面的选项,我会得到以下错误

代码语言:javascript
复制
140735237133072:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:../deps/openssl/openssl/ssl/s23_clnt.c:787:

如果在我的代码之上放置了表单的语句(here中的idea)

代码语言:javascript
复制
https.globalAgent.options.secureProtocol = 'SSLv3_method';

然后,错误消息实际上将更改为

代码语言:javascript
复制
140735237133072:error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number:../deps/openssl/openssl/ssl/s3_pkt.c:338:

我发现这是出乎意料的,因为我已经在options部分中指出,我希望使用SSLv3_method作为协议。在任何情况下,我如何能够在命令行中再现curl的行为?

最后,here提到了端口80可能是与https一起使用它的错误端口。这是真的吗?为什么curl会工作呢?如果这是真的,你知道为什么,或者你能为我指出正确的方向来理解这个问题吗?

提前感谢您的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-27 21:00:16

您应该拥有port: 443,,或者不设置它,因为在使用https模块时,443是默认端口,而不是port: "80"

cURL在没有端口的情况下工作,因为它知道默认情况下https://是端口443。您可以将url作为第一个参数传递给https.request() (如cURL),但随后不能自定义methodheaders或其他无法单独从URL确定的内容。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26077867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档