2013-08-26 40 views
9

Tôi đã tải xuống một số mã mẫu có chút lỗi thời. Nó có các lớp sau:System.Net.CertificatePolicy to ServerCertificateValidationCallback Chấp nhận tất cả các chính sách chứng chỉ

public class TrustAllCertificatePolicy : System.Net.ICertificatePolicy 
{ 
    public TrustAllCertificatePolicy() 
    { } 

    public bool CheckValidationResult(ServicePoint sp, 
       System.Security.Cryptography.X509Certificates.X509Certificate cert, 
       WebRequest req, 
       int problem) 
    { 
     return true; 
    } 
} 

sau này trong mã nó gọi như sau:

System.Net.ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy(); 

Nó cung cấp các cảnh báo sau đây:

Cảnh báo 1 'System.Net.ServicePointManager .CertificatePolicy 'đã lỗi thời:' CertificatePolicy đã lỗi thời cho kiểu này, hãy sử dụng ServerCertificateValidationCallback để thay thế. http://go.microsoft.com/fwlink/?linkid=14202 '

Quy trình hiện tại để đạt được chức năng tương đương là gì?

Tôi đã đọc article trên MSDN nhưng tôi không chắc chắn về cách chuyển đổi? Đây là thư viện lớp. Tôi appologize nếu nó có vẻ như là mặc dù tôi không nghiên cứu đủ này, nhưng khi nói đến giấy chứng nhận ssl, nó là một chút ra khỏi lĩnh vực của tôi. Bất kỳ trợ giúp nào cũng được đánh giá rất cao!

+1

Có vẻ như chúng tôi sử dụng cùng mã ví dụ, cảm ơn vì đã hỏi :) – CularBytes

Trả lời

14

Bao gồm các lớp sau trong mã của bạn

public static class SSLValidator 
     { 
      private static bool OnValidateCertificate(object sender, X509Certificate certificate, X509Chain chain, 
                 SslPolicyErrors sslPolicyErrors) 
      { 
       return true; 
      } 
      public static void OverrideValidation() 
      { 
       ServicePointManager.ServerCertificateValidationCallback = 
        OnValidateCertificate; 
       ServicePointManager.Expect100Continue = true; 
      } 
     } 

Sau đó gọi sau đây trước khi bạn thực hiện cuộc gọi dịch vụ nhưng phải cẩn thận để loại bỏ mã này vào sản xuất khi bạn có Certs thực

SSLValidator.OverrideValidation(); 

Hoặc bạn có thể làm như sau để sử dụng nó chỉ để gỡ lỗi

#if DEBUG 

      SSLValidator.OverrideValidation(); 
#endif 
+0

Giải pháp này không có bất kỳ tác động tiêu cực nào lên ứng dụng. Cảm ơn bạn đã trả lời. – Oxymoron

+0

Bạn có thể giải thích dòng mã cuối cùng trong SSLValidator của lớp học hay không. phần 'ServicePointManager.Expect100Continue'. 'Expect100Continue' là gì? – Oxymoron

+1

Bạn có giải thích chi tiết ngay tại đây http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.expect100continue.aspx –

2

Tôi sử dụng sau khi kết nối với các dịch vụ web khác.

//workaround for SSL certificate issue 
ServicePointManager.ServerCertificateValidationCallback = 
    (sender, certificate, chain, sslPolicyErrors) => { return true; };