2011-09-07 93 views
6

我想在使用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」(我的根證書)也在「本地計算機\受信任的根證書頒發機構」中。

我在這裏錯過了什麼?任何工作示例?

回答

5

我終於找出問題所在。撤銷檢查必須被禁用。我的測試CA顯然沒有關聯的CRL,所以在這種情況下,WCF似乎阻止每個客戶端,因爲它無法驗證。

<clientCertificate> 
    <authentication certificateValidationMode="ChainTrust" 
        revocationMode="NoCheck" ←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←← 
        [...] /> 
</clientCertificate> 
0

好像你應該工作基於this MSDN article使用證書與WCF做什麼。使用受信任的根證書方法時,您可能需要從個人存儲中刪除證書。

如果不工作,要麼則可能是部署根證書也需要應用組策略到您的計算機。查看this TechNet article.的「如果您沒有使用Microsoft Enterprise根證書頒發機構並且只需要計算機組」部分它說,如果未應用組策略,計算機可能不會自動信任根證書。這兩篇文章似乎互相矛盾,所以我不確定哪些會起作用。

+0

我不在ActiveDirectory域中,所以在「Windows設置/安全設置/公鑰策略」下沒有可用的組策略。我也嘗試了第一個建議,只將服務器證書放入「受信任的根證書頒發機構」位置,但未成功。 – AndiDog