问题描述
|
在我的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个示例。