用代理實(shí)現(xiàn)AJAX跨域訪問時(shí)遇到HTTPS
Posted on 2007-04-27 16:26 itspy 閱讀(5951) 評論(4) 編輯 收藏 所屬分類: JAVA技術(shù)
解決AJAX跨域訪問一般都是通過代理服務(wù)器來解決,但是我使用coldFusion實(shí)現(xiàn)這個(gè)問題時(shí)卻遇到這樣一個(gè)錯(cuò)誤,在cfhttp標(biāo)簽使用https訪問網(wǎng)站時(shí),出現(xiàn)如下錯(cuò)誤提示:
Connection Failure: Status code unavailable
找了好久也沒找到原因,最后還是在別的幫助下發(fā)現(xiàn)這個(gè)問題。由于個(gè)問題是語言無關(guān)的,所以不敢獨(dú)享,特拿來和大家分享。
為了方便說明,先做出一些定義。
代理服務(wù)器:在AJAX可以訪問的域中,并且代理AJAX來訪問其它網(wǎng)站的服務(wù)器,
目標(biāo)服務(wù)器:AJAX真實(shí)想想訪問的網(wǎng)址所在的服務(wù)器。
我遇到的問題就是:代理服務(wù)器通過HTTPS訪問目標(biāo)服務(wù)器,但是目標(biāo)服務(wù)器的證書出于一些原因并不被信任。
如何讓代理服務(wù)器相信目標(biāo)服務(wù)器的證書呢:有兩種方法
1):一般代理服務(wù)器都持有一些可信的頂CA的證書,如果站點(diǎn)的證書被其中之一的證書簽名過了,那么代理服務(wù)器就會(huì)相信這個(gè)證書。不過被這些頂給證書簽名是要收費(fèi)的。(如何查看證書被哪些CA給簽名了,可以參考備注)
2):你個(gè)人確定這個(gè)網(wǎng)站是沒有問題的(比如我們訪問公司自己的網(wǎng)站時(shí)),然后手工的告訴代理服務(wù)器,這個(gè)證書是可信的,那么以后被這個(gè)證書簽名過的證書對這個(gè)代理服務(wù)器也是可信的了。
http://livedocs.adobe.com/coldfusion/7/htmldocs/wwhelp/wwhimpl/common/html/wwhelp.htm?context=ColdFusion_Documentation&file=00000272.htm
有一點(diǎn)要說明的,操作系統(tǒng)在安裝的時(shí)候,已經(jīng)安裝了一些可信的證書(如何查看OS已經(jīng)安裝了哪些證書,可以參考備注),所以在通過瀏覽器訪問網(wǎng)站的時(shí)候,如果網(wǎng)站的證書已經(jīng)被這些證書其中之一簽名過了,瀏覽器也會(huì)相信這個(gè)網(wǎng)站的證書。否則瀏覽器會(huì)詢問你,這個(gè)證書有問題,你是否相信這個(gè)證書。
按照上面的URL我給服務(wù)器添加證書后,發(fā)現(xiàn)還是不行。最后證書確實(shí)是被驗(yàn)證通過了,但是證書是給指定的域名使用的,但是我在訪問這個(gè)網(wǎng)站時(shí),使用的IP地址,不是域名,所以服務(wù)器還是不相信這個(gè)網(wǎng)站。就好比:你有一張身份證,身份證確實(shí)是真的,但是你拿到的是別人的身份證。
通過查看證書,發(fā)現(xiàn)證書被頒發(fā)給如下域*.qa.webex.com(如何查看證書被頒發(fā)給哪些域名可以參考備注)。但之前我在code時(shí),AJAX是直接使用的目標(biāo)服務(wù)器的IP地址,不是域名。所以最后目標(biāo)服務(wù)器無法被信任。這就好比,你明明拿著身份證去登機(jī),雖然身份證是真的,但你同時(shí)要表明你就是身份證上的那人,你要是整容整的太大了,人家肯定不認(rèn)你。
最后解決這個(gè)問題的辦法:在代理服務(wù)器上的HOST文件里面添加一行記錄,把felix.qa.webex.com域名與目標(biāo)服務(wù)器的IP關(guān)連起來。
總結(jié):要用代理實(shí)現(xiàn)AJAX跨域訪問遇到HTTPS協(xié)議時(shí),首先要目標(biāo)站點(diǎn)的證書被代理服務(wù)器信任,其次就是訪問的URL處于,證書頒發(fā)對象下面,不要使用IP地址這樣的方法來訪問。
本文章首發(fā)于 http://blog.OpenJ.cn
備注:
1、如何查看證書被哪些CA,或者是其它證書簽名?
通過瀏覽器(IE)打開對應(yīng)的HTTPS網(wǎng)站。
雙擊鎖形圖標(biāo)(如果是IE6,這個(gè)圖標(biāo)應(yīng)該在右下角的狀態(tài)欄)
點(diǎn)擊證書路徑,就可以看到這個(gè)證書的上級,以及上級的上級。
2、證書可以給哪些網(wǎng)站使用?
備注1已經(jīng)說明了如何查看證書,打開證書,點(diǎn)擊常規(guī):
證書頒發(fā)給:*.qa.webex.com
3、如何查看OS已經(jīng)安裝了哪些證書?
IE->工具->Internet選項(xiàng)->內(nèi)容->證書
這時(shí)你會(huì)看到很多Tab,不同的Tab對應(yīng)不同的證書類型,我大概的看了一下,沒有100個(gè),也有幾十個(gè)。在Windows下,F(xiàn)irefox好像并不使用OS的證書,而是使用自己安裝時(shí)帶的證書,以前好像看過,但寫此文章時(shí)沒有找到,也沒想到測試辦法。
正是因?yàn)樽C書一般是OS安裝的,所以可以看到有的商業(yè)CA會(huì)在網(wǎng)站上說明,它頒發(fā)的證書適合xxxx年后的OS。
3、CA:證書認(rèn)證中心,Certificate Authority。我一直把其理解成一個(gè)證書發(fā)布機(jī)構(gòu)。