我有一支VB程式負責將資料POST到user指定網頁,並抓取該網頁顯示內容在儲存至資料庫,
現在某user的伺服器在同個IP下有兩個domain name,為aa.host.com 與 bb.host.com
這兩個網域都分別申請"各自的"安全憑證(AA,BB),
今天我使用win7的IE或chrome訪位兩個網頁安全憑證有正常顯示(aa網頁顯示AA憑證,bb網頁顯示BB憑證),
使用XP的chrome可以正常顯示,但IE時會顯示(aa顯示AA憑證,bb網頁顯示AA憑證),
因此造成每次到該網頁實都會出現憑證與網址不符合的狀況
現在我的VB程式放在windows server 2000,也是碰到IE會顯示錯誤的憑證狀況,導致我無法成功抓取網頁的內容
VB使用Inet1.Execute作為連線語法,對方憑證合發單位為StartSSL
請問要怎麼做才能解決VB程式不到資料的狀況呢??
你可能得採用 IE 以外的解決辦法才行了, 例如 curl 或是別的函式庫
這個問題的根本原因, 在於一個叫 Server Name Indication (SNI) 的功能, 必須要 vista 以上的系統才支援
以下詳細說明:
Web server 的虛擬主機是透過網站名稱來判定你要讀取哪一個網站
不過 HTTPS 則是要先建立起 SSL 連線以後, 才會送出要請求的網站資訊
所以這造成一個矛盾現象, 你不先建立連線, 不知道要讀哪一個網站
但是要建立 SSL 連線, 你又得先知道你要用哪一個網站的憑證去加密
所以在很久以前, 一個 IP 上面只能跑一個 HTTPS 網站, 就是被這個限制了
而 SNI 就是為了解決這種矛盾現象的功能, 它讓 SSL 連線時順便送出要存取的網站資訊
這樣子 Web server 就能夠知道你要連的是哪一個網站, 從而使用相應的憑證去加密
Windows 系統要 IE7 以上, 搭配 Vista 以上的系統才能支援 SNI, 兩者缺一不可