2011-04-13 29 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

相關問題