Nginx

IE/wget 將子域的 SSL 證書與主域的證書混淆的問題

  • April 5, 2012

我正在執行一個網站,其中結帳​​流程使用 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 請求標頭中,這些標頭是加密內容的一部分。因此,只有在已經協商加密之後才能使用它。

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