启用TLS1.0? 无法与对等安全地进行通信:没有连接encryptionalgorithm

一年多来,我一直在经营一个基于照片的网站,允许客户订购印刷品,印刷公司随后履行。 订单以XML格式发布到指定的URL。 最近的订单没有发布,我在检查服务器日志时遇到以下错误:

[Mon Dec 01 21:17:38 2014] [error] [client XXX] cURL error: [35] Cannot communicate securely with peer: no common encryption algorithm(s). 

印刷公司的技术团队能够为我提供一些方向,但我仍然感到困惑。 最初他们告诉我,服务器目前仅支持SSLv2,SSLv3和TLS1.0,并且很可能我们只在端点上启用了TLS1.2。 他们声称没有任何改变,我个人也知道,我们几个月来没有任何修改。 当我最初遇到这个问题时,我试图更新服务器软件包,但是这个问题没能解决。 后来我想也许这个问题围绕着亚马逊EC2实例的安全组织,但我不完全确定。 假设尚未启用,我将如何去启用TLS1.0? 我将如何检查当前启用的传输层证券和安全套接字层? 还有其他build议吗?

有些版本的OpenSSL 在Ubuntu中由于 OpenSSL中的问题而被破坏,而不是Ubuntu本身 ,在连接到比TLS 1.0更好的古老服务器时,也可能在其他发行版(如Amazon Linux)中被破坏,除非您明确强制它,因为@AndySmith上面build议( openssl s_client -connect选项试图看到它在命令行工作,在这种情况下,将是-tls1 )。

我没有看到你的问题,但我假设你正在使用PHP。 我不是PHP的专家,但它看起来像你的解决方法可能是使用CURLOPT_SSLVERSION强制CURL_SSLVERSION_TLSv1_0

如果您的供应商不能比TLS 1.0更好,并且(更差)仍然支持SSLv2和SSLv3,那么他们真的应该感到尴尬。 即使PHP文档build议反对旧版本:

你最好的select是不设置这个,让它使用默认值。 考虑到SSLv2和SSLv3中已知的漏洞,将其设置为2或3是非常危险的

然而,我有一个连接到一个古老的负载平衡硬件的系统,并强制TLS 1.0正是我所要做的,以使其工作,即使它“应该”无论如何工作…而且它确实工作正常,从旧版本的OpenSSL。 系统上的安全更新可能会通过将您更新为OpenSSL版本来引入更改后的行为。