apache - 无法建立 SSL 连接,如何修复我的 SSL 证书?

标签 apache ssl openssl wget

我正在尝试 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/

相关文章:

php - apache 添加额外的参数到 url

visual-studio-2010 - fatal error LNK1120 : 16 unresolved externals openssl : ssleay32MD. lib,libeay32MD.lib

java - Apache/Tomcat服务器中显示汉字

php - 当我登录时安装 phabricator 后出现空白页面

sockets - 如何使用 python 在 ssl/tls 套接字连接中获取域的 IP

ESP8266(Arduino 库)中的 SSL - 如何处理证书更改?

spring boot ssl 客户端证书因 PKIX 路径构建失败错误而失败

ruby - 任何 rvm gem 命令都会导致 openssl 错误

Python OpenSSL - 验证 CRL 文件

apache - 如果找不到文件/文件夹,则使用mod重写目录