2011-08-12 169 views
1

我正在測試本地工作站上的WCF服務,並且遇到了X509證書的問題。客戶端找不到X.509證書

我創建了一個證書併成功註冊了它。證書顯示在證書管理器的可信人員/證書下。服務行爲的配置如下(姓名評論道*):

<serviceCertificate findValue="*****" storeLocation="LocalMachine" 
       storeName="TrustedPeople" x509FindType="FindBySubjectName" /> 
<userNameAuthentication userNamePasswordValidationMode="Custom" 
       customUserNamePasswordValidatorType="*****.DistributorValidator, *****" /> 
<issuedTokenAuthentication certificateValidationMode="None" /> 

但是,當服務在瀏覽器中打開,我得到的錯誤「System.InvalidOperationException:採用找不到X.509證書以下搜索條件:STORENAME 'TrustedPeople',StoreLocation 'LOCALMACHINE',FindType 'FindBySubjectName',FindValue 「* ***

當我嘗試以編程方式設置證書同樣的錯誤發生。測試客戶端:

serviceclient.ClientCredentials.ClientCertificate.SetCertificate(
         StoreLocation.LocalMachine, 
         StoreName.TrustedPeople, 
         X509FindType.FindBySubjectName, 
         "CN=TravelBrokerKey"); 

看來,按主題名稱,指紋或序列號找到沒有區別。我也試圖捕獲異常和調試,但不能將調試器附加到它(所以看起來異常發生在客戶端)。還嘗試通過瀏覽器設置直接註冊證書,但這也沒有幫助。

測試環境操作系統是Windows 7,並通過瀏覽器IE8和Firefox 4.0進行測試。

回答

1

我想你做出錯誤的使用證書的,在你的情況下,證書是用來識別服務,我認爲你的服務需要客戶端使用用戶名客戶端憑據類型,因爲我看你提供一個自定義UserNamePasswordValidator,所以你應該在你的ClientCredentials中設置用戶名和密碼。

您應該在客戶端指定服務的證書,但不要在用於客戶端證書的ClientCredentials.ClientCertificate中指定。

以下鏈接可以幫助你:

An easy way to use certificates for WCF security

How to: Use Certificate Authentication and Message Security in WCF Calling from Windows Forms

+0

好吧,這使事情更清楚一點......但是從服務的配置,如果userNameAuthentication標籤(臨時)註釋掉,不該是否有可能至少在瀏覽器中查看服務或將其作爲服務引用添加到測試客戶端?仍然每次都會收到「找不到x.509 ..」異常。 –

+0

看來您的服務可以正確啓動,如果是的話,我認爲服務可以找到證書。你能否檢查你是否可以手動找到客戶的證書? – Jack

+0

現在就工作。我爲服務使用證書,但不是爲客戶端(需要證書,因爲我有自定義用戶名/密碼檢查,並且不使用https)。感謝您的小費。 –