我正在尝试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
之外还有其他选择,因为我不想这样做吗?
答案 0 :(得分:87)
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://
);如果它工作,则不在端口443上启用SSL。要进一步调试,请使用openssl s_client
和-debug
选项,在错误消息转储服务器响应的前几个字节之前,OpenSSL是无法解析。这可能有助于识别问题,尤其是在服务器未回复ServerHello
消息的情况下。要查看OpenSSL的具体内容,请查看来源:在SSL_R_UNKNOWN_PROTOCOL
中查找ssl/s23_clnt.c
。
在任何情况下,查看apache错误日志也可能提供一些见解。
答案 1 :(得分:10)
只是快速记录(可能的原因)。
您可以在Apache .conf文件中使用VirtualHost
等完全正确的_default_:443
设置。
但是...... 如果甚至有一个.conf文件启用了不正确的设置,也会侦听端口443,那么它将使整个SSL系统关闭。
因此,如果您确定您的.conf文件正确无误,请尝试禁用sites-enabled
中的其他网站.conf文件。
答案 2 :(得分:4)
有几种可能性:
对于初学者来说,要消除(3),如果你telnet到那个端口会发生什么?
假设它不是(3),那么根据您的需要,您可以很好地忽略这些错误并且只是传递--no-certificate-check。您可能希望使用常规浏览器(通常会直接捆绑根证书)并查看事情是否满意。
如果要手动验证证书,请从openssl s_client
输出中发布更多详细信息。或者使用openssl x509 -text -in /path/to/cert
将其打印到您的终端。
答案 3 :(得分:2)
设置新的EC2实例时出现此问题。我没有将HTTPS添加到我的安全组,因此端口443没有打开。
答案 4 :(得分:1)
对我来说,我的服务器的DNS名称已添加到/ etc / hosts中,并且已映射到127.0.0.1,导致
SL23_GET_SERVER_HELLO:未知协议
删除我的真实DNS名称到127.0.0.1的映射解决了这个问题。
答案 5 :(得分:0)
我遇到了同样的问题。港口443在Centos没有开放。
使用以下命令检查443端口:
sudo lsof -i tcp:443
在 /etc/httpd/conf.d/ssl.conf 的第一行添加以下两行:
LoadModule ssl_module modules/mod_ssl.so
Listen 443
答案 6 :(得分:0)
这个问题仅在特殊情况下才发生,当我从一些互联网提供商处致电网站时,
我在apache的VirtualHost配置中仅配置了ip v4, 但是某些路由器使用ip v6,当我将ip v6添加到apache配置时,问题就解决了。
答案 7 :(得分:-2)
我遇到的问题是在客户端服务器环境中。客户端尝试通过http端口80进行连接,但希望服务器代理将请求重定向到其他端口,数据为https。所以基本上通过http询问安全信息。所以服务器应该有http端口80以及端口客户端请求,比如说urla:1111\subB
。
问题是服务器在其他端口e,g urla:2222\subB
上托管了这个问题;所以客户端试图访问超过1111收到错误。更正端口号应解决此问题。在这种情况下,端口号为1111。