无法build立SSL连接,我该如何解决我的SSL证书?

我试图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:未知协议

这个错误发生在OpenSSL从服务器接收到协议版本中的ServerHello以外的东西时发生。 如果服务器使用普通的(未encryption的)HTTP进行回答,就会发生这种情况。 如果服务器仅支持例如TLS 1.2并且客户端不理解协议版本,也可能发生这种情况。 通常情况下,服务器至less向后兼容SSL 3.0 / TLS 1.0,但也许这个特定的服务器不是(通过实施或configuration)。

目前还不清楚你是否试图通过--no-check-certificate 。 如果这能起作用,我会感到很惊讶。

一个简单的testing是使用wget (或浏览器)来请求http://example.com:443 (注意http:// ,而不是https:// ); 如果工作正常,则在端口443上未启用SSL。要进一步debugging,请使用带有-debug选项的openssl s_client ,该选项恰好在错误消息转储了OpenSSL无法parsing的服务器响应的前几个字节之前。 这可能有助于确定问题,特别是如果服务器不回答ServerHello消息。 要查看OpenSSL期望的是什么,请检查源代码:在ssl/s23_clnt.c

在任何情况下,看看Apache的错误日志也可以提供一些洞察力。

在我的情况下,我没有启用网站“default-ssl”。 在/etc/apache2/sites-enabled文件夹中只列出了“000-default”。

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

 a2ensite default-ssl service apache2 reload 

有几种可能性:

  1. 您的工作站没有用于签署服务器证书的根CA证书。 你如何解决这个问题取决于你正在运行什么操作系统和什么版本等。 (我怀疑这是不相关的)
  2. 您的证书没有正确安装。 如果您的SSL证书要求提交中间证书,而您没有设置该证书,则可以获得这些警告。
  3. 你确定你已经在端口443上启用了SSL吗?

对于初学者来说,为了消除(3),如果你telnet到那个端口会发生什么?

假设它不是(3),那么根据你的需要,你可能会忽略这些错误,只是通过 – 无证书检查。 您可能想要使用常规的浏览器(通常会直接捆绑根证书),看看事情是否快乐。

如果要手动validation证书,请从openssl s_client输出中发布更多详细信息。 或者使用openssl x509 -text -in /path/to/cert将其打印输出到terminal。

只是一个简短的说明 (和可能的原因)。

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

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

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

设置新的EC2实例时,我遇到了这个问题。 我没有将HTTPS添加到我的安全组,因此端口443未打开。

我遇到了同样的问题。 端口443在Centos中未打开。

使用以下命令检查443端口:

sudo lsof -i tcp:443

/etc/httpd/conf.d/ssl.conf的第一行添加这两行:

 LoadModule ssl_module modules/mod_ssl.so Listen 443 

我面临的问题是在客户端服务器环境中。 客户端试图通过http端口80进行连接,但希望服务器代理将请求redirect到某个其他端口,并且数据为https。 所以基本上要求通过HTTP安全的信息。 所以服务器应该有HTTP端口80以及端口客户端请求,让我们说urla:1111\subB

问题是服务器托pipe在其他一些端口e,g urla:2222\subB ; 所以客户试图访问过1111正在接收错误。 更正端口号应该可以解决这个问题。 在这种情况下,端口号码1111。