簡體   English   中英

System.Net.WebException:遠程服務器返回錯誤:(403)禁止

[英]System.Net.WebException: The remote server returned an error: (403) Forbidden

我有一個WCF服務,該服務需要使用證書進行客戶端身份驗證。

我有一個使用此WCF的簡單控制台應用程序。

我有2個客戶端證書,第一個證書控制台應用程序運行良好,第二個證書則返回此錯誤:

System.ServiceModel.Security.MessageSecurityException: The HTTP request was forbidden with client authentication scheme 'Anonymous'. ---> System.Net.WebException: The remote server returned an error: (403) Forbidden.

我在IIS日志中看到的是403.7。

這兩個證書都安裝在同一存儲中,並且在執行控制台應用程序的用戶的“ 管理私鑰”中都具有相同的權限。

兩種證書都具有:

  • 私鑰
  • 密鑰用法 :數字簽名,不可否認性,密鑰加密,數據加密(f0)
  • 增強的密鑰用法 :客戶端身份驗證(1.3.6.1.5.5.7.3.2)
  • 有效且具有相同的認證路徑

有任何想法嗎?

UPDATE

如果我激活了SCHANNEL日志記錄,則當我使用失敗的證書時,在事件查看器上我們會看到以下錯誤:

**在此處輸入圖片說明**

解決了

問題在於我們使用以下方法獲取證書:

X509FindType.FindBySubjectName

對於我們正在使用的主題,至少還有另外3個包含該主題的證書。

那么我們得到的證書是不正確的,我們更改代碼以使用

X509FindType.FindBySubjectDistinguishedName或X509FindType.FindByThumbprint

現在可以獲取正確的客戶端證書並可以使用。

這取決於服務器證書驗證模式。 在此輸入圖像描述 例如,當我們使用CertificationValidationMode = Custom時 ,我們可以指定自定義X509validator類,該類實現

System.IdentityModel.Selectors.X509CertificateValidator

處理客戶端證書時,它可以具有自定義驗證。
如果CertificateionValidationMode = ChainTrust ,則必須確保客戶端存儲在正確的存儲區中,並且與服務器證書位於同一鏈中。 什么是服務器證書驗證模式?
如果有什么需要我幫助的,請隨時與我聯系。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM