Ssl

通過 http 服務埠 443 會創建 400 Bad Request Error 而不是重定向

  • July 29, 2020

因此,為了後代,我正在嘗試配置我的伺服器,以便即使有人嘗試訪問 http://domain.com:443,他們也會被正確重定向到該站點的 https 版本(https://域.com)。

在測試 http://domain.com:443 之類的內容時,它沒有正確重定向到 https://domain.com,而是被一個 400 Bad Request 頁面擊中,其中包含以下內容:

錯誤的請求

您的瀏覽器發送了此伺服器無法理解的請求。原因:您對啟用 SSL 的伺服器埠使用純 HTTP。請改用 HTTPS 方案訪問此 URL。

Apache/2.4.18 (Ubuntu) 伺服器在 sub.domain.com 埠 443

我嘗試在我000-default.conf的中包含以下幾行<VirtualHost *:80>

RewriteEngine On 
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{SERVER_NAME}/$1 [R,L]

但它沒有用。

此問題發生在所有域、子域和伺服器 IP 本身上。

可能相關,嘗試對letsencrypt進行空執行會返回以下內容:

  Domain: domain.com
  Type:   connection
  Detail: Failed to connect to 123.123.123.123:443 for TLS-SNI-01
  challenge

對於啟用站點的文件夾中列出的每個域。

TL;TR:您不能在同一埠 (443) 上同時提供 HTTP 和 HTTPS。

雖然理論上可以根據來自客戶端的第一個數據來確定客戶端是發送 HTTP 請求(即GET ..或類似請求)還是開始 TLS 握手(\x16\x03...),但大多數 Web 伺服器不這樣做。相反,他們希望客戶端能夠正常執行,即在一個埠(通常為 80)上使用純 HTTP,在另一個埠(通常為 443)上使用 HTTPS。

您的 URLhttp://example.com:443導致瀏覽器向埠 443 發出純 HTTP 請求。但伺服器期望 TLS 在那裡,這意味著您的純 HTTP 請求是意外的。在這種情況下,Apache 至少足以檢查普通 HTTP 請求的傳入數據,以便它可以為您提供更有用的描述:

原因:您對啟用 SSL 的伺服器埠使用純 HTTP。請改用 HTTPS 方案訪問此 URL。

如果您嘗試與其他伺服器進行此類請求,那麼它們要麼完全關閉連接而不會出現任何錯誤,要麼只是掛起,因為它們仍然希望從客戶端獲得 TLS 握手。

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