无法建立SSL连接,如何修复SSL证书?

med*_*iev 58 apache ssl openssl 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.
Run Code Online (Sandbox Code Playgroud)

我相信这是因为我没有正确设置证书.使用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:
Run Code Online (Sandbox Code Playgroud)

如果我在另一个站点上执行相同的命令,则会显示整个证书.

也许ssl证书从未在Apache的conf文件中为该域设置?

如果是这样,我应该在虚拟主机中指定什么?除了指定之外还有其他选择,--no-check-certificate因为我不想这样做吗?

Dan*_*ger 91

SSL23_GET_SERVER_HELLO:未知协议

当OpenSSL ServerHello从服务器接收到的协议版本中收到的内容之外,会发生此错误.如果服务器使用普通(未加密)HTTP进行应答,则可能会发生这种情况.如果服务器仅支持例如TLS 1.2并且客户端不理解该协议版本,也会发生这种情况.通常,服务器至少与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_R_UNKNOWN_PROTOCOLssl/s23_clnt.c.

在任何情况下,查看apache错误日志也可能提供一些见解.

  • 是的——7 年前写下这个答案时,SSL/TLS 的世界已经非常不同了。 (2认同)

ang*_*sen 20

在我的情况下,我没有启用网站'default-ssl'./etc/apache2/sites-enabled文件夹中仅列出'000-default' .

在Ubuntu 14 LTS,Apache 2.4.7上启用SSL站点:

a2ensite default-ssl
service apache2 reload
Run Code Online (Sandbox Code Playgroud)


Nos*_*.io 11

只是一个快速说明(和可能的原因).

您可以在Apache .conf文件中使用完全正确的VirtualHost设置_default_:443.

但是......如果甚至有一个.conf文件启用了不正确的设置,同时也监听端口443,那么它将使整个SSL系统关闭.

因此,如果您确定.conf文件是正确的,请尝试禁用其他站点.conf文件sites-enabled.