我有一個WCF客戶端和服務。該服務被配置爲使用證書進行加密。這一切工作正常。我們正在使用自簽名證書進行測試。在WCF客戶端顯示服務的證書?
除了我的一個QA傢伙從他的客戶端PC上刪除了證書並且他仍然可以連接到該服務。
這導致了我的問題:
在Internet Explorer(和其他瀏覽器),當你通過HTTPS連接,您可以通過點擊掛鎖圖標查看服務器的證書。我想在我的WCF客戶端中做類似的事情,以便用戶可以驗證服務器的身份。我的WCF客戶端有辦法獲得服務器證書並顯示它嗎?
我有一個WCF客戶端和服務。該服務被配置爲使用證書進行加密。這一切工作正常。我們正在使用自簽名證書進行測試。在WCF客戶端顯示服務的證書?
除了我的一個QA傢伙從他的客戶端PC上刪除了證書並且他仍然可以連接到該服務。
這導致了我的問題:
在Internet Explorer(和其他瀏覽器),當你通過HTTPS連接,您可以通過點擊掛鎖圖標查看服務器的證書。我想在我的WCF客戶端中做類似的事情,以便用戶可以驗證服務器的身份。我的WCF客戶端有辦法獲得服務器證書並顯示它嗎?
實現此目的的一種方法是使用自定義證書驗證程序(在這種情況下,服務器證書將被傳遞給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;
}
}
}
加密將使用服務器端證書,就像它對https站點一樣。
您可以使用客戶端證書進行身份驗證,但這是別的。
是的。我知道。 WCF通過SSL驗證服務器的證書,就像瀏覽器爲HTTPS所做的一樣。瀏覽器允許您檢查服務器的證書。有沒有辦法在WCF中做到這一點? – 2010-10-20 11:54:36