天天看點

建構安全的Xml Web Service系列之wse之證書存儲位置

   我們在前幾天對xml web service的安全性提出了一些建議,大家可以通過以下位址通路:

我曾經在上面幾篇文章中承諾過要寫一些有關wse3.0的,可一直沒有時間,自身對wse3.0的認識也是非常有限,是以一直沒有實作諾言,很是愧疚,今天我就一個小問題作為wse的引子,希望大家繼續關注和支援我。

  第一次使用windows live writer,難免有排版和疏漏,見諒

  今天發生了一件十分郁悶的事情,好多天前我用wse3證書驗證方式架設了一個web service,另外又多此一舉的加上了SSL,并在本地安裝根證書和用于wse驗證證書,在本地建立的用戶端是一個web application,在vs 2005裡面調試一直沒有問題,好長時間了,我還以為一切順利呢,給合作方也寫了文檔說明,發給了人家,結果今天對方報告說将網站釋出在開發機上後,無法通路,錯誤為在指定存儲位置找不到x.509證書,我在本機測試了下,你說郁悶不?在vs2005裡面調試中運作的好好的頁面,釋出到IIS中就有這個問題,我将證書存儲在CurrentUser的My下面了,我開始就懷疑network services 不能通路這個存儲位置造成這個錯誤,但是為何在vs2005中調試就沒有問題呢?細想,原來在vs2005的虛拟IIS是不是運作在network service賬戶下的,因為我每次調試,并沒有看到w3wp程序啟動,network services賬戶是不能通路目前使用者存儲下的證書的,這個是一個wse通路證書因為權限問題最常見的問題,而windows應用程式因為運作在目前賬戶上卻可以通路。而network service能夠通路本地計算機存儲位置下的證書,于是我将證書重新導入到本地計算機-個人,然後将<x509 storeLocation="CurrentUser"更改為<x509 storeLocation="LocalMachine",重新打開網頁,程式就可以了。

  通過今天這個小小的問題,我總結出三條經驗:

  1)當我們遇到同樣環境下,同一個程式一個能運作,一個不能運作,我們首先可以考慮的是權限的問題,我們程式運作的賬戶是否有權限通路某個資源。

  2)vs2005中虛拟的IIS和IIS存在着些許的差異,不要圖一時友善,用這個作為程式正常的标準,最好還是在iis裡面調試和運作程式,可以少一些麻煩。

 3 )  當您的應用程式為運作在iis的應用程式的時候,如果不采用模拟,您的應用程式是不能通路位于目前使用者下的證書的,包括用于SSL的證書,這個問題更典型,如果您在ie中能通路https的頁面,在程式中卻不能的話,那問題可能就出在這裡。ie是運作在目前使用者的,是以能通路目前使用者下證書,而iis中的程式是運作在network services的,不能通路,您必須将證書存放在本地計算機才可以。

繼續閱讀