使用SSL从C#应用程序调用WebService

问题描述

| 在我的C#桌面应用程序中,我正在调用PHP开发的Web服务。我可以拥有CA文件。我不知道如何通过SSL调用Web服务和认证证书。我必须通过服务器什么,以及对服务器进行身份验证的响应期望什么?老实说,我不知道。 编辑: 引用自:http://weblogs.asp.net/jan/archive/2003/12/04/41154.aspx //调用Web服务之前     System.Net.ServicePointManager.CertificatePolicy = new MyPolicy();
public class MyPolicy : ICertificatePolicy
{
    X509Certificate clientCert = null;

    public MyPolicy() {
        clientCert = X509Certificate.CreateFromSignedFile(HTTPUtility.CERT_FILE);
    }

    public bool CheckValidationResult(ServicePoint srvPoint,X509Certificate certificate,WebRequest request,int certificateProblem)
    {
        Console.WriteLine(\"********* Into CheckValidationResult : \" + certificate.ToString());

        Console.WriteLine(\"####### Client Certificate : \" + clientCert.ToString() + \"\\n\" + \"Subject = \" + clientCert.Subject);
        Console.WriteLine(\"Issuer : \" + clientCert.Issuer + \"\\n Seral No : \" + clientCert.GetSerialNumberString());
        Console.WriteLine(\"Not Before : \" + clientCert.GetEffectiveDateString() +\" \\n Not After : \" + clientCert.GetExpirationDateString());
        Console.WriteLine(\"Thumb Print : \" + clientCert.GetPublicKeyString());
        Console.WriteLine(\"######## EQuals SERVER CERT : \" + clientCert.Equals(certificate));

        // Force to return true
        return true;
    }
}
以上检查方法是否正确?如果不是,为什么和什么解决方案。我也收到此警告\“ \'System.Net.ServicePointManager.CertificatePolicy \'已过时:\'CertificatePolicy对于此类型已过时,请改为使用ServerCertificateValidationCallback。\”。 这样我怎么知道CheckValidationResult()是否返回false? 非常感谢您的帮助。 谢谢     

解决方法

您是否尝试过时消息中建议使用ServerCertificateValidationCallback?例如,您可以在现有的MyPolicy类中添加如下所示的方法:
public bool ValidateServerCertificate(object sender,X509Certificate certificate,X509Chain chain,SslPolicyErrors sslPolicyErrors)
{
    Console.WriteLine(sslPolicyErrors);  // Or whatever you want to do...
    return true;
}
完成后,您可以替换现有的
System.Net.ServicePointManager.CertificatePolicy = new MyPolicy();
符合以下要求:
MyPolicy policy = new MyPolicy();
System.Net.ServicePointManager.ServerCertificateValidationCallback = policy.ValidateServerCertificate;
    ,看一下这一点:如何在ASP.NET Web应用程序中使用客户端证书进行身份验证来调用Web服务 您可以在该页面底部找到2个示例。