2010-10-19 44 views
1

我有一個WCF客戶端和服務。該服務被配置爲使用證書進行加密。這一切工作正常。我們正在使用自簽名證書進行測試。在WCF客戶端顯示服務的證書?

除了我的一個QA傢伙從他的客戶端PC上刪除了證書並且他仍然可以連接到該服務。

這導致了我的問題:

在Internet Explorer(和其他瀏覽器),當你通過HTTPS連接,您可以通過點擊掛鎖圖標查看服務器的證書。我想在我的WCF客戶端中做類似的事情,以便用戶可以驗證服務器的身份。我的WCF客戶端有辦法獲得服務器證書並顯示它嗎?

回答

1

實現此目的的一種方法是使用自定義證書驗證程序(在這種情況下,服務器證書將被傳遞給Validate方法,並且從那裏您可以執行您喜歡的任何操作(即將證書保存在某處客戶端可以使用,然後使用其中一個默認驗證器驗證它))

public class MyX509CertificateValidator : X509CertificateValidator 
{ 
    private readonly X509CertificateValidationMode _validationMode; 
    private readonly WcfClient _client; 

    public MyX509CertificateValidator(WcfClient client, X509CertificateValidationMode validationMode) 
    { 
     _client = client; 
     _validationMode = validationMode; 
    } 

    public override void Validate(X509Certificate2 certificate) 
    { 
     if (certificate == null) 
     { 
      throw new ArgumentNullException("certificate"); 
     } 

     _client.ServerCertificate = certificate; 

     switch (_validationMode) 
     { 
      case X509CertificateValidationMode.None: 
       None.Validate(certificate); 
       return; 
      case X509CertificateValidationMode.PeerOrChainTrust: 
       PeerOrChainTrust.Validate(certificate); 
       return; 
      case X509CertificateValidationMode.PeerTrust: 
       PeerTrust.Validate(certificate); 
       return; 
      default: 
       ChainTrust.Validate(certificate); 
       return; 
     } 

    } 
} 
0

加密將使用服務器端證書,就像它對https站點一樣。

您可以使用客戶端證書進行身份驗證,但這是別的。

+0

是的。我知道。 WCF通過SSL驗證服務器的證書,就像瀏覽器爲HTTPS所做的一樣。瀏覽器允許您檢查服務器的證書。有沒有辦法在WCF中做到這一點? – 2010-10-20 11:54:36