如果证书在.NET中过期,如何调用https asmx Web服务

时间:2011-10-09 08:49:18

标签: asp.net asp.net-mvc web-services asmx security

使用Visual Studio从MVC2控制器生成的代码使用以下代码调用Asmx Web服务。

由于Web服务证书已过期,方法调用将引发异常。如何解决这个问题,以便仍然可以使用Web服务?

使用.NET 3.5和MVC2。

public class AsmxController : Controller 
{ 
    public ActionResult Index() 
    { 
        var cl = new store2.CommerceSoapClient(); 

        //    System.ServiceModel.Security.SecurityNegotiationException was unhandled by user code 
        //Message=Could not establish trust relationship for the SSL/TLS secure channel with authority 'asmxwebservice.com'. 
        var vl = cl.GetVendorList(  AsmxService.LicenseHeader() , 
            new AsmxService.GetVendorListRequest()); 
        return View(); 
    } 
} 

}

1 个答案:

答案 0 :(得分:3)

来自James blog

  

因此,为了进行测试,我们需要找到绕过证书的方法   验证。事实证明,你需要提供一个   RemoteCertificateValidationCallback委托并附上   ServicePointManager.ServerCertificateValidationCallback。什么不是   如果两个线程竞争设置它会发生什么   属性为不同的值,因为它是一个静态属性。反光   表明属性集方法没有做任何花哨的事情,所以   你很容易陷入竞争状态。

所以,他做了以下事情:

// allows for validation of SSL conversations
ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(ValidateRemoteCertificate);

// callback used to validate the certificate in an SSL conversation
private static bool ValidateRemoteCertificate(
object sender,  X509Certificate certificate,    X509Chain chain,    SslPolicyErrors policyErrors)
{
    if (Convert.ToBoolean(ConfigurationManager.AppSettings["IgnoreSslErrors"]))
    {
        // allow any old dodgy certificate...
        return true;
    }
    else
    {
        return policyErrors == SslPolicyErrors.None;
    }
}