Nginx
IE/wget 將子域的 SSL 證書與主域的證書混淆的問題
我正在執行一個網站,其中結帳流程使用 Comodo EV 證書進行 SSL 認證。
我們還在整個站點上進行 Piwik 網路分析跟踪,該站點通過
stats
子域提供服務。為了防止混合域錯誤,Piwik 可以通過 HTTPS 和 HTTP 訪問 - 對於 HTTPS,我們的 Piwik 子域使用(便宜得多)Comodo PositiveSSL 證書進行認證。這是奇怪的部分 - 當通過 wget 和某些版本的 Internet Explorer 訪問主站點上的 HTTPS 頁面時,
stats.psychicbazaar.com
證書似乎以某種方式被錯誤載入,導致 IE 和 wget 中出現“地址不匹配”警告:ERROR: certificate common name `stats.psychicbazaar.com' doesn't match requested host name `www.psychicbazaar.com'.
curl、Chrome 或 Firefox 不會出現此問題。例如,使用捲曲:
$ curl -Iv https://www.psychicbazaar.com/shop/checkout * <snip> * Connected to www.psychicbazaar.com (178.79.183.162) port 443 (#0) * successfully set certificate verify locations: * CAfile: none CApath: /etc/ssl/certs * SSLv3, TLS handshake, Client hello (1): * SSLv3, TLS handshake, Server hello (2): * SSLv3, TLS handshake, CERT (11): * SSLv3, TLS handshake, Server key exchange (12): * SSLv3, TLS handshake, Server finished (14): * SSLv3, TLS handshake, Client key exchange (16): * SSLv3, TLS change cipher, Client hello (1): * SSLv3, TLS handshake, Finished (20): * SSLv3, TLS change cipher, Client hello (1): * SSLv3, TLS handshake, Finished (20): * SSL connection using DHE-RSA-AES256-SHA * Server certificate: * subject: serialNumber=07440589; 1.3.6.1.4.1.311.60.2.1.3=GB; 1.3.6.1.4.1.311.60.2.1. 2=Greater London; businessCategory=Private Organization; C=GB; postalCode=EC24 4RQ; ST=Greater London; L=London; street=The Roma Building 32-38; O=Psychic Bazaar Ltd; OU=COMODO EV * start date: 2012-02-16 00:00:00 GMT * expire date: 2013-02-15 23:59:59 GMT * subjectAltName: www.psychicbazaar.com matched * issuer: C=GB; ST=Greater Manchester; L=Salford; O=COMODO CA Limited; CN=COMODO Extended Validation Secure Server CA * SSL certificate verify ok. > HEAD /shop/checkout HTTP/1.1 > User-Agent: curl/7.21.6 (x86_64-pc-linux-gnu) libcurl/7.21.6 OpenSSL/1.0.0e zlib/1.2.3.4 libidn/1.22 librtmp/2.3 > Host: www.psychicbazaar.com > Accept: */* > < <snip>
這裡可能發生了什麼 - 為什麼瀏覽器在載入主域上的頁面時會讀取子域的 SSL 證書並出錯?非常感謝任何幫助!
# dig stats.psychicbazaar.com [...] ;; ANSWER SECTION: stats.psychicbazaar.com. 3600 IN A 178.79.183.162 [...] # dig www.psychicbazaar.com [...] ;; ANSWER SECTION: www.psychicbazaar.com. 3600 IN A 178.79.183.162 [...]
如果您為兩者使用相同的 IP 地址,您的 Web 伺服器應該如何知道為 TLS 交換提供哪個證書?這不起作用:
http://wiki.apache.org/httpd/NameBasedSSLVHosts
通常,在同一個 IP 地址和埠上託管多個 SSL 虛擬主機是不可能的。這是因為 Apache 需要知道主機的名稱才能選擇正確的證書來設置加密層。但是被請求的主機名僅包含在 HTTP 請求標頭中,這些標頭是加密內容的一部分。因此,只有在已經協商加密之後才能使用它。