LetsEncrypt SSL错误-SSL例程:ssl3_get_record:版本号错误

时间:2018-11-01 15:49:14

标签: apache ssl lets-encrypt

我设法从LetsEncrypt提取了一个新证书。我的VirtualHost配置设置为:

<VirtualHost *:80>
    ServerName example.com
    Redirect 301 / https://example.com/
</VirtualHost>

<VirtualHost *:443>
    Servername example.com
    DocumentRoot /var/www/example.com/wav
    ErrorLog /var/log/apache2/example.com/www/error.log

    SSLEngine On
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>

尝试通过openssl验证这一点时

openssl s_client -connect example.com -port 443

我得到以下信息:

CONNECTED(00000003)
140229655213824:error:1408F10B:SSL routines:ssl3_get_record:wrong version number:../ssl/record/ssl3_record.c:252:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 5 bytes and written 202 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
    SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : 0000
    Session-ID: 
    Session-ID-ctx: 
    Master-Key: 
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1541086087
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: no

因此,握手似乎可以,但是证书没有发送。

值得指出的是,Apache日志不报告任何错误-只是通常的-“正在启动/正在关闭”消息。 apache2ctl configtest未报告任何问题。

6 个答案:

答案 0 :(得分:0)

  

因此,握手似乎可以,但是证书没有发送。

握手不正确。客户端已发送ClientHello开始握手,但没有收到任何有用的回复:

                                            |- ClientHello
                                           ---
SSL handshake has read 5 bytes and written 202 bytes
                      ---
                       |- nothing useful from server

我不知道它在5个字节中返回了什么,但它看起来不像TLS(对于TLS消息来说太短了)。从您显示的配置部分中可能看不到某些服务器配置错误。也可能是一些中间盒(防火墙,负载平衡器...)损坏了连接。可能还因为您未连接到预期的服务器(即example.com无法解析到您的实际服务器)。

我建议您首先检查服务器本身(即localhost),如果此方法有效,请使用支票远离服务器。您可能还进行了数据包捕获,并查看了客户端接收到的5个字节中的内容。

答案 1 :(得分:0)

我也遇到了同样的错误。建议您在本地测试https连接,将域名添加到/ etc / hosts,例如: 127.0.0.1 yourdomain.com 为了防止数据包不外出。

然后使用“链接”在本地环境中测试https连接,如果没有问题,则是由ISP防火墙问题或设置引起的,我终于找到了本地https连接,并将问题扔给了ISP以最终解决此问题,祝你好运!

答案 2 :(得分:0)

也为ssl设置文件类型,这可以正常工作 看到“文件匹配”部分?如果缺少该内容,则会看到此错误。

SSLEngine on
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
SSLCertificateFile /etc/letsencrypt/live/mysite.net/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mysite.net/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
SSLHonorCipherOrder on
SSLProtocol all -SSLv2 -SSLv3
#SSLCipherSuite EECDH+AES:EDH+AES:-SHA1:EECDH+RC4:EDH+RC4:RC4-SHA:EECDH+AES256:EDH+AES256:AES256-SHA:!aNULL:!eNULL:!EXP:!LOW:!MD5
#SSLCipherSuite "AES256-SHA"
SSLCipherSuite HIGH:!aNULL:!MD5

答案 3 :(得分:0)

只为那些遇到相同问题的人分享。

这是我在带有Apache的Ubuntu 20中的经验

我正在SITES-AVAILABLE文件夹中编辑default-ssl.conf,但是什么也没发生。无论我做什么,上面的相同错误都会重复。

我将默认的ssl.conf从可用的站点复制到了SITES-ENABLED文件夹中,没有IfModule mod_ssl.c标记并且已解决了问题。

希望此信息对某人有帮助。

谢谢

答案 4 :(得分:0)

似乎apache的默认*:80 HTTP处理程序还将在443上侦听不匹配的VirtualHost IP,包括环回。

例如,我的计算机具有NAT ip 192.168.32.5 NAT,当然还有127.0.0.1环回。如果我的站点conf使用,则解析为127.0.0.1:443的任何请求实际上都由默认的HTTP处理程序回答,而不是HTTPS。只需将我的SSL主机名的主机条目设置为192.168.32.5即可解决此问题。

答案 5 :(得分:0)

我遇到了同样的问题。我的 example.com.conf 文件确实正确设置了 HTTPS,但我的 000-default.conf 文件没有。我似乎忘记了包含 SSL 证书并为我的 000-default.conf 打开 SSL 引擎,但在我修复之后,它运行良好。

我添加到 000-default.conf 的代码:

SSLEngine On
SSLCertificateFile /etc/ssl/example.com/domain.cert.pem
SSLCertificateKeyFile /etc/ssl/example.com/private.key.pem