SNI 和 HTTP 提供的網域之間的衝突

SNI 和 HTTP 提供的網域之間的衝突

我最近將一個帶有小型商店的 WordPress 網站從託管提供者遷移到了我自己運行 Ubuntu Server 12.04.2 LTS 和 Apache 2.2.22 的伺服器。我的商店需要 SSL。我在伺服器的新 IP 上設定了幾個簡單的虛擬主機,一個綁定到特定 IP 的連接埠 80,另一個綁定到連接埠ServerName www.example.com443 ServerAlias example.com。我有SSLStrictSNIVHostCheck off

該網站運行速度非常慢,但正在運行。我在錯誤日誌中收到以下內容。

[Error] Hostname example.com provided via SNI and hostname www.example.com provided via HTTP are different

我預計緩慢與上述消息有關。關於為什麼會出現這種情況以及我能做些什麼有什麼想法嗎?

答案1

查看您的訪問日誌(不是錯誤日誌)。透過錯誤的時間和日期,您應該能夠識別有問題的請求並找出用戶代理。就我而言,它是一個機器人:

"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.2)"

我的伺服器回答 HTTP 400:錯誤請求。

除非我弄錯了,否則在 TLS 協商中,客戶端會傳送主機名稱兩次:一次是在 SNI(伺服器名稱指示)中建立 SSL 連線之前,一次是在實際 HTTP 請求之後。如果伺服器名稱不匹配,則表示用戶端損壞,且與伺服器的配置方式無關。

也許有一天他們會修復他們的機器人,同時你可能可以忽略它。我懷疑這會導致主機速度緩慢,除非請求的速率非常高。

答案2

也許會引發這個錯誤故意地由某些客戶端測試您的伺服器的漏洞。我發現來自的請求researchscan367.eecs.umich.edu觸發了我維護的伺服器上的錯誤。在這種情況下,發生錯誤是一件好事®。

我很好奇可能會發生什麼樣的攻擊,我在 Security Stack Exchange 上問了這個問題:Apache2的錯誤代碼AH02032可以防止什麼樣的攻擊?

答案3

就我而言,建立具有下劃線的新虛擬主機是問題所在。我有一個通配符 SSL 憑證。

沒有工作:

<VirtualHost *:443>
        SSLEngine on
        ServerName sub_domain.example.com
        Redirect / https://www.example.com/restofmyredirectlink
</VirtualHost>

儘管 Apache 確實成功重新啟動,但我收到了 HTTP 400 錯誤。在錯誤日誌中:

[Wed Sep 05 11:28:00.349960 2018] [ssl:error] [pid 19906:tid 140392626808576] AH02031: Hostname sub_domain.example.com provided via SNI, but no hostname provided in HTTP request

但刪除底線有效:

<VirtualHost *:443>
        SSLEngine on
        ServerName subdomain.example.com
        Redirect / https://www.example.com/restofmyredirectlink
</VirtualHost>

答案4

檢查 /etc/hosts 檔案以查看是否將網域名稱指派給本機(內部)IP 位址。更改 /etc/hosts 後不要忘記重新啟動名稱服務快取守護程式 service nscd restart

相關內容