我有一个WCF客户端和服务。该服务配置为使用证书进行加密。这一切都很好。我们使用自签名证书进行测试。
除了我的一位QA人员从他的客户端PC上删除了证书,他仍然可以连接到该服务。
这引出了我的问题:
在Internet Explorer(和其他浏览器)中,当您通过HTTPS连接时,可以通过单击挂锁图标查看服务器的证书。我想在我的WCF客户端中做类似的事情,以便用户可以验证服务器的身份。我的WCF客户端是否有办法获取服务器证书并显示它?
答案 0 :(得分: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;
}
}
}
答案 1 :(得分:0)
加密将使用服务器端证书,就像它对https站点一样。
您可以使用客户端证书进行身份验证,但这是另一回事。