我正在尝试 wget
到我自己的盒子,它不能是 wget 中的内部地址(另一个开发人员这么说)。
当我 wget 时,我得到这个:
wget http://example.com
--2013-03-01 15:03:30-- http://example.com/
Resolving example.com... 172.20.0.224
Connecting to example.com|172.20.0.224|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://www.example.com/ [following]
--2013-03-01 15:03:30-- https://www.example.com/
Resolving www.example.com... 172.20.0.224
Connecting to www.example.com|172.20.0.224|:443... connected.
OpenSSL: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
Unable to establish SSL connection.
我相信这是因为我没有正确设置证书。使用 openssl:
openssl s_client -connect example.com:443
CONNECTED(00000003)
15586:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:588:
虽然如果我在另一个站点上执行相同的命令,它会显示整个证书。
也许 ssl 证书从未在该域的 Apache 的 conf 文件中设置?
如果是这样,我应该在虚拟主机中指定什么?除了指定 --no-check-certificate
之外还有其他选择吗,因为我不想这样做?
最佳答案
SSL23_GET_SERVER_HELLO:unknown protocol
当 OpenSSL 从服务器接收到的协议(protocol)版本不是 ServerHello
时,就会发生此错误。如果服务器使用普通(未加密)HTTP 进行应答,则可能会发生这种情况。如果服务器仅支持例如,它也可能发生TLS 1.2 和客户端不了解该协议(protocol)版本。通常,服务器至少向后兼容 SSL 3.0/TLS 1.0,但也许这个特定的服务器不是(通过实现或配置)。
不清楚您是否试图通过 --no-check-certificate
。如果这行得通,我会感到很惊讶。
一个简单的测试是使用wget
(或浏览器)请求http://example.com:443
(注意http://
,而不是 https://
);如果有效,则 SSL 未在端口 443 上启用。要进一步调试它,请使用 openssl s_client
和 -debug
选项,它会在错误消息转储前几个OpenSSL 无法解析的服务器响应字节。这可能有助于识别问题,尤其是在服务器未使用 ServerHello
消息进行应答时。要查看 OpenSSL 的确切期望,请查看源代码:在 ssl/s23_clnt.c
中查找 SSL_R_UNKNOWN_PROTOCOL
。
无论如何,查看 apache 错误日志也可能提供一些见解。
关于apache - 无法建立 SSL 连接,如何修复我的 SSL 证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15166950/