構建安全的XmlWebService系列之wse之證書儲存位置

傑克.陳發表於2015-03-20
原文:構建安全的Xml Web Service系列之wse之證書儲存位置

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

   構建安全的Xml Web Service系列之初探使用Soap頭

   構建安全的Xml Web Service系列之如何察看SoapMessage

   構建安全的Xml Web Service系列之SSL篇

我曾經在上面幾篇文章中承諾過要寫一些有關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的,不能訪問,您必須將證書存放在本地計算機才可以。


相關文章