首页 > 解决方案 > SSL23_GET_SERVER_HELLO:运行 perl 脚本时的未知协议

问题描述

@Steffen:我会检查脚本部分。我刚刚注意到现在服务的 wget 命令无法建立 SSL 连接

[root@XXXX rpms]# wget https://testuser:testpwd.service-now.com/u_incident_interface.do --2018-06-10 13:00:07-- https://srv_SOAPimporterNagios:password@rwe.service-now.com/u_incident_interface.do Resolving rwestproxy-neurathdc.rwe.com... 10.88.253.20 Connecting to rwestproxy-neurathdc.rwe.com|10.88.253.20|:8080... connected. Unable to establish SSL connection. [root@XXXX rpms]#

您能就 SSL 连接问题提出建议吗?

标签: perlssllwp

解决方案


TL;DR:服务器以普通流量而不是预期的 TLS 响应。造成这种情况的原因可能是对客户端的错误期望、错误配置或旧的错误软件。

SSL 连接尝试失败错误:140770FC:SSL 例程:SSL23_GET_SERVER_HELLO:未知协议

如果另一台设备根本无法正确使用 SSL,则会发生类似unknown protocol或同样SSL_ERROR_RX_RECORD_TOO_LONG 或通常发生的错误。wrong version number这意味着客户端正在使用 ClientHello 启动 TLS 握手,而服务器正在响应一些与 SSL/TLS 完全不同的东西。客户端仍然会尝试将非 TLS 答案解释为 TLS,因此会抱怨一些奇怪的 TLS 版本或一些损坏的 TLS 记录。

如果尝试使用 HTTPS 与普通 HTTP 服务器通信,通常会发生这种情况。这可能是因为服务器从一开始就没有配置 HTTPS,并且错误地假设将 URL 从 更改http://https://会神奇地使服务器 HTTPS 准备好。也可能是那个人在服务器上访问了错误的端口,即普通的 HTTP 端口,而不是 HTTPS 端口。在某些情况下,由于服务器配置错误,只能说普通 HTTP,而配置看起来应该像这个问题中的 HTTPS 一样。或者可能是因为代理配置错误,即假设代理会被HTTPS访问即使对于像this question这样的HTTPS URL,它也可以通过普通HTTP访问。

如果服务器在切换到 TLS 之前需要一些初始纯数据,也会发生这种情况。例如,当使用代理连接到最终目标时。在 HTTP 代理的情况下,客户端需要先发送一个纯 HTTPCONNECT请求,从服务器读取纯 HTTP 响应并检查是否成功,然后才能开始 TLS 握手。例如,如果您使用的是旧版本的 LWP ,则可能会发生这种情况,因为 6.00 和 6.06 之间的 HTTPS 代理支持被破坏。


推荐阅读