關於 Windows XP 與 HTTPS 兼容的事情

不兼容 SNI 的現象

  • 衆所周知,偉大的 Windows XPServer Name Indication 的支持很差。表現爲打不開某些 https 網頁。
  • 爲了兼容性,須要關閉SNI以保證IE6能正常訪問。這樣的代價就是:須要更多的服務器資源(IP不可複用,資源不易複用)。
  • 某些雲廠商,開啓SNI選項的狀況下價格會更優惠、關閉SNI會有額外收費

故障現象

  • Windows XP + IE6 沒法打開 https 網頁:

沒法顯示網頁

  • 實際上緩解的辦法在上圖中已顯示:

請單擊工具菜單,而後單擊 Internet 選項。在「高級」選項卡上,滾動到「安全」部分,複選 SSL 2.0、SSL 3.0、TLS 1.0、PCT 1.0 設置。nginx

  • 開啓IE6的TLS支持後,重啓瀏覽器。確認安全警告後,能正常打開以下:

開啓TLS支持

  • 但拿到的證書都是被第1個加載的證書,欣慰的時訪問到的內容(vhost)是正確的:

開啓TLS後獲取的證書

測試方法

安裝Nginx

  • Nginx爲例,測試https證書與IE6的兼容性
apt-get -y install nginx # yum -y install nginx

自制證書

  • SNI容許一個IP指向多個證書,那麼咱們作兩個域名使用兩個證書。簡要以下:
openssl genrsa -des3 -out /etc/nginx/conf.d/s1.key 1024
openssl genrsa -des3 -out /etc/nginx/conf.d/s2.key 1024
openssl req -new -key /etc/nginx/conf.d/s1.key -out /etc/nginx/conf.d/s1.csr
openssl req -new -key /etc/nginx/conf.d/s2.key -out /etc/nginx/conf.d/s2.csr
openssl rsa -in /etc/nginx/conf.d/s1.key -out /etc/nginx/conf.d/s1-nopwd.key
openssl rsa -in /etc/nginx/conf.d/s2.key -out /etc/nginx/conf.d/s2-nopwd.key
openssl x509 -req -days 365 -in /etc/nginx/conf.d/s1.csr -signkey /etc/nginx/conf.d/s1-nopwd.key -out /etc/nginx/conf.d/s1.crt
openssl x509 -req -days 365 -in /etc/nginx/conf.d/s2.csr -signkey /etc/nginx/conf.d/s2-nopwd.key -out /etc/nginx/conf.d/s2.crt

Nginx.conf 片斷

  • 對應https的關鍵配置段:
server {
    listen       443 ssl;
    server_name  s1.higkoo.com;
    ssl_certificate conf.d/s1.crt;
    ssl_certificate_key conf.d/s1-nopwd.key;
    charset utf-8;
    location / {
        add_header id 's1';
        stub_status on;
        access_log off;
    }
}
server {
    listen       443 ssl;
    server_name  s2.higkoo.com;
    ssl_certificate conf.d/s2.crt;
    ssl_certificate_key conf.d/s2-nopwd.key;
    ssl_session_timeout 30m;
    ssl_protocols TLSv1.2 TLSv1.1 TLSv1 SSLv3; # protocols、ciphers 參考 google、baidu,兼顧 安全和兼容性。
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA:RSA+AES:TLS_RSA_WITH_3DES_EDE_CBC_SHA:TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA:RC4-SHA:ECDHE-RSA-RC4-SHA;
    ssl_session_cache shared:SSL:50m;
    ssl_prefer_server_ciphers off;
    charset utf-8;
    location / {
        add_header id 's2';
        stub_status on;
        access_log off;
    }
}

兼容性測試

  • 那麼 Windows XP 下其它瀏覽器是否能正確處理呢?

Windows XP + IE7

  • 不須要任何特殊設置(重置默認配置),IE7手動信任證書後便可正常瀏覽:

IE7能夠正常瀏覽

  • 然而,獲取到的證書永遠是第1個。不過整體講能打開就是比IE6有進步:

證書永遠是第1個

Windows XP + IE8

  • IE8 和 IE7 同樣,默認便可訪問但證書只能獲取到第1個:

證書永遠是第1個

Windows XP + IE9

XP裝不上IE9

Windows XP + 獵豹瀏覽器

  • 獵豹默認用極速模式(Chrome內核)能正常打開:

正常訪問

  • 手動切換到IE兼容模式的狀況下,結果和系統所裝IE的測試結果相同。好比IE6:

極速模式

Windows XP + Chrome

  • Chrome須要手動確認證書的安全性後,能正常獲取到指定域名的https證書。

Chrome正常

Windows XP + Firefox

  • 手動添加例外後,能正常獲取證書和打開網頁:

正常打開

Windows 7 + IE9

  • Windows 7 默認是支持SNI的:

在Win7下則正常

  • 拿到的證書和內容都是正常的:

Win7和IE9表現良好

Linux + Curl

  • curlsni也是默認支持的,跳過證書的校驗:

以curl示例

Linux + Lynx

  • Linux下的文本瀏覽器lynx,和IE6同樣拿到的是第1個證書。因此打開第2個網站時會提示證書錯誤,手動確認後可正常打開:

證書錯誤

  • 結論就是:至少放棄 IE6 ,換用其它瀏覽器! 堅持使用系統默認IE的話,請放棄 Windows XP、升級系統。
相關文章
相關標籤/搜索