SSL_ERROR_RX_RECORD_TOO_LONG certbot

SSL_ERROR_RX_RECORD_TOO_LONG certbot

我有以下设置:

  • Apache 2.4
  • Ubuntu 16.04 LTS
  • letsencrypt/certbot

现在,只要我在默认服务器上启用以下 .conf,我配置的所有顶级域都会收到 SSL_ERROR_RX_RECORD_TOO_LONG 错误。如果我禁用此配置,一切都会按预期工作。

由于这个事实,我确信 apache 监听了正确的端口和正确的 IP,并且 letsencrypt/certbot 设置正确。

<VirtualHost _default_:443>
    DocumentRoot "/var/www/html"
    <Directory "/var/www/html">
            Require all denied
    </Directory>
</VirtualHost>

将其更改为

<VirtualHost _default_:443>
    DocumentRoot "/var/www/html"
    <Directory "/var/www/html">
            Require all granted
    </Directory>
</VirtualHost>

问题还没有解决。

apache2ctl -S 

显示预期结果,001-default-ssl.conf 和 001-default.conf 是端口 80 和端口 443 的默认值。

openssl s_client -connect workingdomain.tld:443

印刷:

已连接(00000003)
139991513372312:错误:140770FC:SSL例程:SSL23_GET_SERVER_HELLO:未知协议:s23_clnt.c:794:
---
没有可用的对等证书
---
未发送客户端证书 CA 名称
---
SSL 握手已读取 7 个字节并写入 305 个字节
---
新的,(无),密码是(无)
不支持安全重新协商
压缩:无
扩展:无
未协商 ALPN
SSL 会话:
    协议:TLSv1.2
    密码:0000
    会话 ID:
    会话 ID-ctx:
    主密钥:
    关键参数:无
    PSK 身份:无
    PSK 身份提示:无
    SRP 用户名:无
    开始时间:1515852550
    超时:300(秒)
    验证返回代码:0(确定)
---

再次,一旦我禁用此配置,每个使用 certbot/letsencrypt 配置的域都会按预期工作。

我不明白这一点,因为我基本上只阻止了默认服务器,所以我的所有其他域名都不应受到此设置的影响。

答案1

您必须指向您的 SSL 证书 -

<VirtualHost _default_:443>
    ServerName example.com
    ServerAlias www.example.com
    ServerAdmin [email protected]
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
    SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
    CustomLog ${APACHE_LOG_DIR}/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
    DocumentRoot /var/www-example.com
    <directory /var/www-example.com>
        Options All
                AllowOverride All
                Require all granted
    </directory>
    ErrorLog ${APACHE_LOG_DIR}/ssl-example.com-error.log
    CustomLog ${APACHE_LOG_DIR}/ssl-example.com-access.log combined
</VirtualHost>

如果您想为多个域名提供服务,您仍然可以这样做,至少对于理解 SNI/etc 的现代浏览器来说是这样。

首先,为每个域获取单独的 letsencrypt 证书。如果您有多个主机名(即www.example.comexample.com),它们可以共享,只要实际域相同即可。

letsencrypt certonly -d example1.com -d www.example1.com -d mail.example1.com
letsencrypt certonly -d example2.com -d www.example2.com -d mail.example2.com

这将为您提供目录下的 2 组证书/etc/letsencrypt/live/DOMAIN/

当您创建 vhost 配置时,不要指定_default_:443使用主机的实际 IP 并指向适当的证书文件。

<VirtualHost 10.0.1.2:443>
    ServerName example1.com
    ServerAlias www.example1.com
    ServerAdmin [email protected]
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example1.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example1.com/privkey.pem
    SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
    CustomLog ${APACHE_LOG_DIR}/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
    DocumentRoot /var/www-example1.com
    <directory /var/www-example1.com>
        Options All
                AllowOverride All
                Require all granted
    </directory>
    ErrorLog ${APACHE_LOG_DIR}/ssl-example1.com-error.log
    CustomLog ${APACHE_LOG_DIR}/ssl-example1.com-access.log combined
</VirtualHost>
<VirtualHost 10.0.1.2:443>
    ServerName example2.com
    ServerAlias www.example2.com
    ServerAdmin [email protected]
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example2.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example2.com/privkey.pem
    SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
    CustomLog ${APACHE_LOG_DIR}/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
    DocumentRoot /var/www-example2.com
    <directory /var/www-example2.com>
        Options All
                AllowOverride All
                Require all granted
    </directory>
    ErrorLog ${APACHE_LOG_DIR}/ssl-example2.com-error.log
    CustomLog ${APACHE_LOG_DIR}/ssl-example2.com-access.log combined
</VirtualHost>

我不会在我的网站上收集表单信息等,但我希望所有内容都运行 HTTPS,因此我设置了 vhost 配置,将非 HTTPS 请求重定向到 HTTPS 端,并使用非命名的 catch-all 重定向到 example1.com -

<VirtualHost *:80>
  RewriteEngine on
  RewriteRule ^/(.*)$ https://example1.com/$1 [R,L]
</VirtualHost>
<VirtualHost *:80>
  ServerName example1.com
  ServerAlias www.example1.com
  RewriteEngine on
  RewriteRule ^/(.*)$ https://example1.com/$1 [R,L]
</VirtualHost>
<VirtualHost *:80>
  ServerName example2.com
  ServerAlias www.example2.com
  RewriteEngine on
  RewriteRule ^/(.*)$ https://example2.com/$1 [R,L]
</VirtualHost>

相关内容