perl - 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 连接问题提出建议吗?
解决方案
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 代理支持被破坏。
推荐阅读
- regex - 仅允许使用 mod_rewrite 的虚拟主机中的主机
- python - Python将输出写入目录中的文件
- python - 如何从具有多个值的 JSON 文件中提取数据
- ssl - 无法找到请求目标的有效证书路径 - 签名证书
- ruby-on-rails - Rails:将一个时区的未来会议时间转换为另一个时区
- machine-learning - 贝叶斯网中变量消元的顺序如何选择?
- zlib - 如何将外部 C 库链接到 WebAssembly 构建
- javascript - 我编写了一个 javascript 程序来创建一个计算折扣的网页,如下所示:
- dynamics-crm - 如何在 .Net 标准库中访问 Microsoft.xrm.sdk
- c++ - Valarrays 是专门的模板吗?