现在的位置: 首页 > 综合 > 正文

通过https访问webservice时如何忽略掉服务端证书的验证不通过

2013年02月13日 ⁄ 综合 ⁄ 共 1076字 ⁄ 字号 评论关闭
帮同事看一个带证书访问远程webservice的问题,此前一直不能成功。
用浏览器访问,选择证书,并忽略一些问题继续,可以访问,但是在vs2005中用代码来访问,WSE2.0也安装了,x509certificate也正确指定了(原来证书可以不一定要导入到证书库里面的,直接按路径指定也可以),
但是代码抛出WebException - AuthenticationException,验证异常中的信息是:远程证书无效。看看SoapHttpClientProtocol有没有其他与证书相关的设置,找了一会没有,那没办法了,赶快去问google吧,输入“webservice,远程证书无效”,好,来了,
这个网页帮了忙了:http://www.xue163.com/html/2008625/631589.html
在2.0中增加这一句:
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult);

public bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)

{  

    //不管服务端证书怎么样,都通过校验,嘿嘿

    return true;
}

把如上的处理一加上,再试,成功。

为了验证一下在CheckValidationResult的回调中是否捕捉到远程证书的问题,我在这个回调函数中把日志记录下来:

public bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{   
    logger.Info(errors.ToString());

    //不管服务端证书怎么样,都通过校验,嘿嘿
    return true;
}

好嘛,错误信息果真打出来了,Remote certificate name mismatch.
这个错误信息与在浏览器上出现的问题一样,只是在浏览器上可以忽略问题,不断的“继续”,在c#代码中,原来是通过ServicePointManager.ServerCertificateValidationCallback增加回调来提供验证。

抱歉!评论已关闭.