文章編號: 901183 - 上次校閱: 2007年12月4日 - 版次: 2.2 如何在 ASP.NET Web 應用程式中使用用戶端憑證呼叫 Web 服務進行驗證
在此頁中結論本文將討論如何從 ASP.NET Web 應用程式,將用戶端憑證傳遞至 Web 服務進行驗證。 注意 本文中的步驟也適用於使用 HttpWebRequest 類別,提出直接 HTTP 要求時 (如果不叫用 Web 服務)。 簡介Web 服務經常必須驗證呼叫 Web 服務的應用程式。在 Web
服務執行授權之前,必須執行呼叫應用程式的驗證,而其中一個驗證技術是要求呼叫 Web 服務的應用程式提供用戶端憑證。 當 ASP.NET Web 應用程式嘗試呼叫使用憑證進行驗證的 Web 服務時,可能會收到「拒絕存取」的錯誤訊息。但是當主控台應用程式或 Microsoft Windows Form 應用程式呼叫相同的 Web 服務時,則不會收到錯誤訊息。 這是因為電腦會維護兩種不同的憑證存放區,所以發生這種情況。
其他相關資訊如果要讓 ASP.NET Web
應用程式能夠使用用戶端憑證,您必須將用戶端憑證安裝在本機電腦存放區中。當您在本機電腦存放區中安裝用戶端憑證時,只有「系統管理員」群組中的使用者帳戶,以及安裝用戶端憑證的使用者能夠使用用戶端憑證。因此,您必須將用戶端憑證的存取權限,授予用來執行
ASP.NET Web 應用程式的使用者帳戶。 注意 您必須安裝 Microsoft .NET Framework 1.1 Service Pack 1 (SP1) 才能使用本機電腦存放區中的用戶端憑證。 此外,當 ASP.NET Web 應用程式呼叫 Web 服務時,應用程式必須從憑證存放區中匯出用戶端憑證,然後將用戶端憑證新增至 Web 服務呼叫。 安裝用戶端憑證並授予使用者帳戶存取權限如果要安裝用戶端憑證,並且將用戶端憑證的存取權授予用來執行 ASP.NET Web 應用程式的使用者帳戶,請依照下列步驟執行。步驟 1:在本機電腦存放區中安裝用戶端憑證如果 PKCS#12 (.pfx) 格式的檔案含有用戶端憑證,您便能使用 Microsoft Windows HTTP Services Certificate Configuration Tool (WinHttpCertCfg.exe) 安裝用戶端憑證,並且將用戶端憑證的存取權限授予其他使用者帳戶,例如 Network Service 帳戶。如果要執行這項操作,請依照下列步驟執行:
步驟 2:設定用戶端憑證的存取權限在這個步驟中,您必須授予 ASP.NET 帳戶存取存放在本機電腦存放區中的用戶端憑證權限。Network Service 帳戶是在 Windows Server 2003 中執行 Web 應用程式的預設帳戶。因此,您必須授予 Network Service 帳戶憑證的存取權限。如果您已經設定自訂帳戶執行 ASP.NET,就必須授予自訂帳戶存取權限。注意 在 Microsoft Internet Information Server (IIS) 5.0 中,ASP.NET 是在 ASPNET 帳戶而不是在 Network Service 帳戶下執行。因此,您必須在執行 IIS 5.0 的電腦上授予 ASPNET 帳戶權限。 如果要授予特定使用者帳戶的存取權限,請在命令提示字元中執行下列命令: WinHttpCertCfg.exe -g -c LOCAL_MACHINE\MY -s "IssuedToName" -a "AccountName" 注意AccountName
是本機電腦帳戶或網域帳戶的名稱,IssuedToName
則是發行用戶端憑證的公司或網域名稱。這個命令包含不區分大小寫的搜尋字串,這個搜尋字串會尋找主旨名稱包含該字串的第一個列舉憑證。以下範例 (命令列命令) 說明如何將用戶端憑證的存取權限,授予 Microsoft Internet Information Services (IIS) 6.0 中的 Network Service 帳戶: WinHttpCertCfg.exe -g -c LOCAL_MACHINE\MY -s "IssuedToName" -a "NetworkService" 以下範例 (命令列命令) 說明如何將用戶端憑證的存取權限授予 IIS 5.0 中的 ASPNET 帳戶:WinHttpCertCfg.exe -g -c LOCAL_MACHINE\MY -s "IssuedToName" -a "ASPNET" 注意 當您使用 Windows HTTP Services Certificate Configuration Tool
時,可以將匯入用戶端憑證的程序,以及設定用戶端憑證存取權限的程序結合成單一步驟。例如,下列命令列命令會同時執行兩個程序:Winhttpcertcfg.exe -i PFXFile -c LOCAL_MACHINE\My -a "AccountName" 步驟 3:從本機使用者存放區將用戶端憑證複製到本機電腦存放區如果互動式應用程式 (例如 Windows Form 應用程式或命令列應用程式) 能夠存取用戶端憑證,就會將用戶端憑證存放在本機使用者存放區中。然而,如果服務應用程式 (例如 ASP.NET Web 應用程式) 無法存取相同的用戶端憑證,就不會將用戶端憑證存放在本機電腦存放區中。這個步驟將告訴您,如何使用「憑證匯出精靈」從本機使用者存放區將用戶端憑證複製到本機電腦存放區中。 注意 如果用戶端憑證已經在本機電腦存放區中,或是如果您可以像「步驟 1」一樣直接將用戶端憑證安裝在本機電腦存放區中,請跳至「步驟 4」。然而,如果您執行「步驟 3」,就必須回到「步驟 2」授予用戶端憑證的存取權限。 如果要將用戶端憑證複製到本機電腦存放區,請依照下列步驟執行:
步驟 4:安裝 CA 的根憑證如果用戶端憑證已經由外部 CA (例如 VeriSign) 加以簽署,或是已經安裝 CA 的根憑證,就可以跳過「步驟 4」。根據預設,許多外部 CA 的根憑證都已經預先安裝在 Windows 的「信任的根憑證授權存放區」中。 檢查是否已經安裝根憑證如果要檢查是否已經安裝 CA 的根憑證,請依照下列步驟執行:
安裝根憑證如果想要使用的 CA 根憑證並未列出,您必須安裝根憑證。如果想要使用的 CA 根憑證已經以憑證檔案的方式 (例如 .cer、.der 或 .pfx 檔) 發行給您,請依照下列步驟執行:
要求根憑證如果想要使用的 CA 包含在「Microsoft 憑證服務」安裝資料庫中,您可以要求根憑證。如果要執行這項操作,請依照下列步驟執行:
呼叫 Web 服務在您將用戶端憑證安裝在本機電腦存放區或本機使用者存放區後,就可以從 ASP.NET Web 應用程式存取用戶端憑證以呼叫 Web 服務。Windows Form 應用程式或 ASP.NET Web 應用程式在存取用戶端憑證的步驟上是一樣的。如果您使用 .NET Framework 1.1,必須先將金鑰匯出至使用 DER 編碼的檔案。因為 System.Security.Cryptography.X509Certificates.X509Certificate 類別並未包含從憑證存放區直接存取憑證詳細資料的方法,所以您必須匯出金鑰。因此,應用程式必須從使用 DER 編碼的檔案讀取憑證詳細資料。 注意 Web Services Enhancements 2.0 for Microsoft .NET (WSE) 能提供方法,讓應用程式從憑證存放區直接擷取憑證詳細資料。 下列 C# 範例程式碼會顯示如何以傳遞用戶端憑證進行驗證的方式,呼叫 Web 服務。 Web Services Enhancements 2.0 for Microsoft .NETWeb Services Enhancements 2.0 for Microsoft .NET (WSE) 是使用最新的 Web Service 通訊協定建立 Web 服務的 Microsoft .NET 類別庫。這些通訊協定包括:
http://www.microsoft.com/downloads/details.aspx?FamilyId=FC5F06C5-821F-41D3-A4FE-6C7B56423841
(http://www.microsoft.com/downloads/details.aspx?FamilyId=FC5F06C5-821F-41D3-A4FE-6C7B56423841)
您不需使用其中任一種通訊協定來存取需要驗證用戶端憑證的 Web 服務,但應該會想使用 Microsoft.Web.Services2.Security.X509 類別。Microsoft.Web.Services2.Security.X509 類別包含直接存取憑證存放區中之用戶端憑證的方法。如果您使用這些方法,就不需要將憑證匯出至檔案。下列 C# 範例程式碼會顯示如何在本機電腦存放區中,尋找名為 SecureMathClient 的第一個憑證。接著這個範例程式碼會使用憑證呼叫數學 Web 服務的 Add 方法。這個數學 Web 服務需要用戶端憑證。 ?考如需有關 System.Security.Cryptography.X509Certificates.X509Certificate 類別的詳細資訊,請造訪下列 Microsoft Developer Network (MSDN) 網站: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemsecuritycryptographyx509certificatesx509certificateclasstopic.asp
(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemsecuritycryptographyx509certificatesx509certificateclasstopic.asp)
如需有關如何使用 ASP.NET Web 應用程式呼叫安全網站的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:817854?
(http://support.microsoft.com/kb/817854/
)
FIX:ASP.NET Web 應用程式無法將用戶端認證傳送至安全網站上
這篇文章中的資訊適用於:
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。 | 其他資源 其他支援網站社群立即取得協助文章翻譯
|






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email
回此頁最上方
