Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services Ubuntu 14.0.4 OpenSSL 1.0.1f和TLSv1_2016的握手错误_Amazon Web Services_Ssl_Openssl_Ubuntu 14.04 - Fatal编程技术网

Amazon web services Ubuntu 14.0.4 OpenSSL 1.0.1f和TLSv1_2016的握手错误

Amazon web services Ubuntu 14.0.4 OpenSSL 1.0.1f和TLSv1_2016的握手错误,amazon-web-services,ssl,openssl,ubuntu-14.04,Amazon Web Services,Ssl,Openssl,Ubuntu 14.04,请容忍我。我不是SSL加密专家。我只想使用服务器的API连接到服务器。我不能。当我按照文档中的说明使用此api时,会发生以下错误: [Errno 1] _ssl.c:510: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure 该API似乎托管在某个AWS服务器上,该API的支持人员向我介绍了该API,并提供了他们的服务器使用TLSv1_2016的附加信息。我不确定这是否正确,但我是这

请容忍我。我不是SSL加密专家。我只想使用服务器的API连接到服务器。我不能。当我按照文档中的说明使用此api时,会发生以下错误:

[Errno 1] _ssl.c:510: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
该API似乎托管在某个AWS服务器上,该API的支持人员向我介绍了该API,并提供了他们的服务器使用TLSv1_2016的附加信息。我不确定这是否正确,但我是这么被告知的

Ubuntu 14.0.4 OpenSSL v1.0.1f附带的OpenSSL不支持此版本的TLS。支持1.2版。我定期升级我的系统,而且似乎没有任何认可的Ubuntu版本支持这个协议。有人建议我升级,但不清楚是什么

我完全不懂这些。有人能告诉我,我可以对我的系统进行什么升级来解决这个问题吗


安装了openssl 1.1.0g附带的Ubuntu-18.04后,更新问题依然存在。

答案主要来自评论

问题显然是,与当今的许多SSL/TLS服务器一样,特别是那些处理多个域(如Cloudfront)的服务器,需要在SSL/TLS中使用SNI服务器名称指示扩展。与大多数程序不同的是,openssl s_客户端有一个控制是否发送SNI的选项

您以前没有说过此代码是Python。操作系统不涉及SSL/TLS,只涉及较低级别的TCP/IP协议。根据底部的说明

Python3和Python2.7.9+在其SSL模块中包括对SNI的本机支持。有关在Python<2.7.9上对请求使用SNI的信息,请参阅此堆栈溢出答案


链接到其中有几个答案,这些答案似乎主要包括更新各种内容,即使您提供了Python的详细信息和您没有提供的请求,我也无法进行测试

TLSv1_2016不是TLS的一个版本,但根据该页面,Cloudfront中的策略映射到多个TLS版本和密码套件,OpenSSL 1.0.1支持这些版本和密码套件。hello上的握手失败可能由协议版本和密码套件之外的其他原因引起,这是您的代码还是其他人提供的封闭库?如果是后者,调试将更加困难。尝试连接openssl s_客户端-connect$host:$port,如果被拒绝,尝试添加-servername$host;如果这两种方法中的任何一种都起作用,那么这不是您的OpenSSL的错,而是它们的库。。。。。。如果服务器在443和public上可用,那么Cloudfront显然是,但您不能让我们自己寻找,请尝试通过以下方式获取分析-它可以方便地测试并帮助描述许多可能的问题。好的,openssl s_client-connect$host:$port-servername$host Works我认为这一定意味着openssl的某些配置允许进行此连接,但这不是用于随机连接尝试的默认配置。也许另一个版本会有所帮助,即使问题也可以通过重新配置服务器来解决,但如果s_客户端在没有-servername的情况下失败并成功使用它,那么服务器需要SNI扩展服务器名称指示。近年来,许多服务器需要或更喜欢SNI,有时它是在共享服务器上处理多个域的唯一方法,就像CloudFront必须使用的CDN一样。OpenSSL返回到0.9.8至少可以发送SNI,但前提是调用OpenSSL的代码指定它;你还没有说这是你的代码还是“他们的”。如果“他们的”已关闭,请查看是否有更新的版本或任何相关的配置选项。。。就是这样。我以前没有听说过SNI,也不了解使用servername参数进行openssl测试的重要性。一旦我知道它叫什么,谷歌SNI就很容易找到答案。