我想在使用WCF服務進行通信時使用基於證書的加密和驗證。所以我創建了測試證書,「TempCA」作爲我的根CA,「SignedByCA」作爲由該CA簽名的客戶端證書。WCF證書鏈信任認證:「調用者未被服務認證。」
當我把在「本地計算機\受信任的人」的客戶端證書,並使用certificateValidationMode="PeerTrust"
,服務識別客戶端,一切都按預期工作。但通過信任鏈驗證(certificateValidationMode="ChainTrust"
),我遇到了錯誤「調用者未被服務認證」。
相關的服務器端配置:
<behaviors>
<serviceBehaviors>
<behavior name="customServiceBehavior">
[...]
<serviceCredentials>
<clientCertificate>
<authentication certificateValidationMode="ChainTrust" trustedStoreLocation="LocalMachine" mapClientCertificateToWindowsAccount="false" />
</clientCertificate>
<serviceCertificate findValue="TempCA"
storeLocation="LocalMachine"
storeName="My"
x509FindType="FindBySubjectName" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<wsHttpBinding>
<binding name="soapBindingConfiguration">
<security mode="Message">
<message clientCredentialType="Certificate" />
</security>
</binding>
</wsHttpBinding>
</bindings>
相關的客戶端配置(其餘自動創建的 「添加服務引用」):
<endpointBehaviors>
<behavior name="customClientBehavior">
<clientCredentials>
<clientCertificate findValue="SignedByCA" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName" />
</clientCredentials>
</behavior>
</endpointBehaviors>
客戶端和服務器證書存儲在「本地計算機\個人」(因爲我在一臺電腦上測試)和「TempCA」(我的根證書)也在「本地計算機\受信任的根證書頒發機構」中。
我在這裏錯過了什麼?任何工作示例?
我不在ActiveDirectory域中,所以在「Windows設置/安全設置/公鑰策略」下沒有可用的組策略。我也嘗試了第一個建議,只將服務器證書放入「受信任的根證書頒發機構」位置,但未成功。 – AndiDog