Apache-2.4

SSL 證書、重定向、無 www 是否正確(apache)?

  • November 11, 2018

我的目標

我想讓一個網站只能通過 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 提供服務。

  1. 為什麼瀏覽器在某些情況下會抱怨證書對給定域無效?
  2. 有沒有更好/更簡單的方法來實現我想要的?在那種情況下(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 證書。在沒有重定向的情況下測試這些域,然後實施您的重定向。

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