2011-04-13 26 views
2

在我的C#桌面应用程序中,我打电话使用PHP开发的Web服务。我可以拥有CA文件。我不知道如何通过SSL调用Web服务并验证证书。我需要通过什么服务器以及对服务器进行身份验证时的响应情况?老实说,我不知道。使用SSL从C#应用程序调用WebService

编辑: 从推介:http://weblogs.asp.net/jan/archive/2003/12/04/41154.aspx

//之前调用Web服务 System.Net.ServicePointManager.CertificatePolicy =新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?

任何帮助,高度赞赏。

感谢

回答

2

您是否按照过时消息中的建议尝试使用ServerCertificateValidationCallback?一旦这样做了

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类

MyPolicy policy = new MyPolicy(); 
System.Net.ServicePointManager.ServerCertificateValidationCallback = policy.ValidateServerCertificate; 
+0

我将如何知道policy.ValidateServerCertificate返回true/false。我没有找到任何方法从ServicePointManager.ServerCertificateValidationCallback frond。如果我想要公开/私人钥匙,可以通过这个方法来实现吗?或者我错了? – Tvd 2011-04-14 07:36:54

+0

我想你可能误解了自定义证书策略的用途。它旨在允许您在某些情况下(通常在开发过程中)使用无效证书。这听起来不像是你想要做的。你能解释一下这可能是什么吗? – 2011-04-14 12:34:07

+0

感谢妮可。我的需求是:用我的软件包CA文件将与客户端。当我要求提供wEb服务时,我只需要客户端使用CA来验证自签名服务器证书,我们不会为每个客户端使用客户端证书,服务本身是公开的,因此我们不关心谁使用它。这与公钥/私钥文件有关,通常由对象完成。这是我的要求。我所做的是错的还是不合适的?我为了实现这个目标做了些什么和怎样的努力? – Tvd 2011-04-15 08:04:44

相关问题