在WCF客户端中显示服务的证书?

时间:2010-10-19 08:42:47

标签: wcf wcf-security

我有一个WCF客户端和服务。该服务配置为使用证书进行加密。这一切都很好。我们使用自签名证书进行测试。

除了我的一位QA人员从他的客户端PC上删除了证书,他仍然可以连接到该服务。

这引出了我的问题:

在Internet Explorer(和其他浏览器)中,当您通过HTTPS连接时,可以通过单击挂锁图标查看服务器的证书。我想在我的WCF客户端中做类似的事情,以便用户可以验证服务器的身份。我的WCF客户端是否有办法获取服务器证书并显示它?

2 个答案:

答案 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站点一样。

您可以使用客户端证书进行身份验证,但这是另一回事。