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

在我的C#桌面应用程序中,我正在调用在php中开发的Web服务。 我可以拥有CA文件。 我不知道如何通过SSL调用Web服务并validation证书。 我需要通过服务器以及从服务器进行身份validation的响应内容? 老实说,我不知道。

编辑:参考: 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应用程序中进行身份validation来调用Web服务

您可以在该页面的底部找到2个示例。