SSL 證書、重定向、無 www 是否正確(apache)?
我的目標
我想讓一個網站只能通過 SSL(加密)訪問,並且許多域僅重定向到一個主域(沒有重複的內容),並且所有 www 變體都應該是 no-www。
該網站由 apache 伺服器託管並配置為虛擬主機。
我希望有如下重定向:
http://example.com -> https://example.com
http://www.example.com -> https://example.com
https://www.example.com -> https://example.com
http://example.de -> https://example.com
http://www.example.de -> https://example.com
https://example.de -> https://example.com
https://www.example.de -> https://example.com
$$ … $$ 錯誤/問題
我的問題是某些請求(如
https://www.example.de
)被重定向到,https://example.com
但例如 firefox 說連接不安全(SSL_ERROR_BAD_CERT_DOMAIN
)。其他一些工作。我的虛擬主機配置如下所示:
<VirtualHost *:80> ServerName www.example.com ServerAlias example.com www.example.de example.de RedirectMatch 301 (.*) https://example.com$1 </VirtualHost> <VirtualHost *:443> ServerName www.example.com ServerAlias www.example.de example.de RedirectMatch 301 (.*) https://example.com$1 </VirtualHost> <VirtualHost *:443> ServerName example.com ServerAdmin webmaster@example.com DocumentRoot /var/www/example <Directory "/var/www/example"> AllowOverride All AuthType Basic AuthName "Example.com Temporary Preview" AuthUserFile /var/www/users Require user example-dev </Directory> Include /etc/letsencrypt/options-ssl-apache.conf SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem </VirtualHost>
我
certbot
用於驗證域並從letsencrypt獲取ssl證書,如下所示:
sudo certbot --authenticator webroot --installer apache certonly
然後選擇所有域(apache 安裝程序完全猜到了),為 interactiv cli 安裝程序中的身份驗證過程指定 webroot。
(在 certbot 程序之前,我為該域使用了另一個 vhost 配置,僅使用埠 80 讓身份驗證程序正常工作)
我的問題/誤解
我這樣理解我的 apache vhost 配置:
- 擷取所有http請求(所有域,帶和不帶 www)並將它們重定向到
https://example.com
- 擷取所有https請求(所有域除外
example.com
,帶和不帶 www 並將它們重定向到https://example.com
- 最後擷取https請求
example.com
並使用第三個 VirtualHost 塊中所述的所有配置為 DocumentRoot 提供服務。
- 為什麼瀏覽器在某些情況下會抱怨證書對給定域無效?
- 有沒有更好/更簡單的方法來實現我想要的?在那種情況下(SSL、no-www、letsencrypt)我是否誤解了 Apache 重定向的概念?使用命令時我是否遺漏了某些部分
certbot
?
您是否獲得了 example.de 的證書?即使您正在執行 301 重定向,瀏覽器首先會為重定向到另一個域範例的域請求 SSL:https://www.example.de>被重定向到<https://example.com。
因此域 ( https://www.example.de ) 也必須具有有效的 SSL,因為它是瀏覽器首先請求的。如果您將非 SSL http://www.example.de>重定向到<https://example.com ,則不會出現這種情況。
因此,請確保為所有 SSL 域頒發 SSL 證書。在沒有重定向的情況下測試這些域,然後實施您的重定向。