Apache-2.4

SSL_ERROR_RX_RECORD_TOO_LONG 證書機器人

  • January 13, 2018

我有以下設置:

  • 阿帕奇 2.4
  • Ubuntu 16.04 LTS
  • 讓加密/證書機器人

現在,只要我在預設伺服器上啟用以下 .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:
主密鑰:
鍵-Arg:無
PSK 身份:無
PSK 身份提示:無
SRP 使用者名:無
開始時間:1515852550
超時:300(秒)
驗證返回碼:0(ok)
---

同樣,一旦我禁用此配置,每個配置了 certbot/letsencrypt 的域都會按預期工作。

我不明白這一點,因為我基本上只阻止了預設伺服器,所以我的所有其他域都應該不受此設置的影響。

您必須指向您的 SSL 證書 -

<VirtualHost _default_:443>
   ServerName example.com
   ServerAlias www.example.com
   ServerAdmin webmaster@example.com
   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

這將在/etc/letsencrypt/live/DOMAIN/目錄下為您提供 2 組證書。

創建虛擬主機配置時,不要指定_default_:443使用主機的實際 IP 並指向適當的證書文件。

<VirtualHost 10.0.1.2:443>
   ServerName example1.com
   ServerAlias www.example1.com
   ServerAdmin webmaster@example1.com
   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 webmaster@example2.com
   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 端,並使用未命名的全部內容重定向到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>

引用自:https://serverfault.com/questions/892056