Apache-2.4
SSL_ERROR_RX_RECORD_TOO_LONG 證書機器人
我有以下設置:
- 阿帕奇 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.com
和example.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>