【问题标题】:LetsEncrypt SSL Error - SSL routines:ssl3_get_record:wrong version numberLetsEncrypt SSL 错误 - SSL 例程:ssl3_get_record:错误的版本号
【发布时间】:2019-04-05 21:09:11
【问题描述】:

我已设法从 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 没有报告任何问题。

【问题讨论】:

    标签: apache ssl openssl


    【解决方案1】:

    所以,看起来握手没问题,但没有发送证书。

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

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

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

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

    【讨论】:

    • 我同意,这也是“ssl3_get_record:wrong version number”所暗示的:客户端试图解析它收到的 TLS 消息,但获取 TLS 版本的第一个基本解析失败,所以实际上,输入很可能根本不是 TLS。当然,长度也是一个强有力的指标......
    【解决方案2】:

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

    然后用“links”在本地环境下测试https连接,如果没有问题,那是ISP防火墙问题或设置造成的,我终于发现本地https连接正常,最后把问题交给ISP解决这个问题,祝你好运!

    【讨论】:

    • 根据您的 VirtualHosts IP 的设置方式,这可能会失败,例如在我的系统上。我将我的 VirtualHost 绑定到一个内部 IP 端口 443,所以它没有绑定到环回 IP。
    【解决方案3】:

    也为 ssl 设置文件类型,这已确认有效 请参阅 FilesMatch 部分?如果缺少,您将看到此错误。

    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
    

    【讨论】:

      【解决方案4】:

      只为遇到同样问题的人分享。

      这是我在 Ubuntu 20 中使用 Apache 的经验

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

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

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

      谢谢

      【讨论】:

      • 谢谢。根据您的建议,我将其修复为:sudo a2ensite default-sslsudo systemctl reload apache2。我不必编辑 .conf 文件。
      • 在 20.04 遇到同样的问题,仍在努力解决。
      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:

        我有同样的问题。我的 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
        

        【讨论】:

          猜你喜欢
          • 2021-06-23
          • 2021-08-15
          • 2015-06-19
          • 1970-01-01
          • 2014-01-12
          • 1970-01-01
          • 2012-10-05
          • 2020-11-28
          • 1970-01-01
          相关资源
          最近更新 更多