2012-02-11 72 views
13

Tôi có Windows 2008 Server với IIS 7 sử dụng .NET C# Application để gửi yêu cầu tới PayPal để xử lý thanh toán. Một vài tháng trước, tôi đã cài đặt một Chứng chỉ đã được Verisign mua. Sau khi cài đặt, tôi đã có thể chạy mã WebClient của mình để tạo kết nối SSL thành công và xử lý thanh toán qua API PayPal NVP (Tên cặp giá trị).Lỗi SSL - Nhận ngoại lệ SSL/TLS khi sử dụng HttpWebRequest với chứng chỉ ứng dụng khách

Gần đây, tôi đã gặp lỗi trong Giao dịch SSL. Các lỗi cụ thể như sau:

Không thể tạo SSL/TLS secure channel

Tôi đã kiểm tra tất cả mọi thứ tôi có thể nghĩ ra, và đọc nhiều bài viết trên StackOverflow và những nơi khác trên mạng.

Tài nguyên tốt nhất tôi thấy được điều này:

Yêu cầu đã bị hủy bỏ: Không thể tạo SSL/TLS secure channel

Lookup lỗi trong bài viết này http://support.microsoft.com/kb/915599 Nghị quyết J. Nó cũng có thể là bạn không cung cấp chứng chỉ ứng dụng khách. Có nhiều khả năng đây là vấn đề với TLS hoặc SSL3 đang được sử dụng và máy chủ không hiểu nó.

http://blogs.msdn.com/b/jpsanders/archive/2009/01/07/you-receive-one-or-more-error-messages-when-you-try-to-make-an-http-request-in-an-application-that-is-built-on-the-net-framework-2-0.aspx

Và đây là một danh sách của tất cả các nguồn lực khác tôi đã cố gắng đọc và implimenting giải pháp của họ:

Liên kết

khác nhau tôi đã thử:

http://support.microsoft.com/kb/901183

Could not create SSL/TLS secure channel - Could the problem be a proxy server?

The request was aborted: Could not create SSL/TLS secure channel

The request was aborted: Could not create SSL/TLS secure channel - Decrypt returned SEC_I_RENEGOTIATE

http://social.msdn.microsoft.com/forums/en-US/netfxnetcom/thread/99d49286-5c3a-4311-a1e3-499f035ce979/

http://blogs.msdn.com/b/jpsanders/archive/2009/01/07/you-receive-one-or-more-error-messages-when-you-try-to-make-an-http-request-in-an-application-that-is-built-on-the-net-framework-2-0.aspx

http://forums.iis.net/t/1156690.aspx

Tôi đã thử các giải pháp sau:

  1. Cài đặt lại giấy chứng nhận, và đặt nó vào các cửa hàng khác nhau (cá nhân, LocalComputer)
  2. Cho code ServiceManager này:

    ServicePointManager.Expect100Continue = true; 
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3; 
    
  3. khai thác gỗ Enabled để đạt được các chi tiết rườm rà hơn

  4. Nhiều giải pháp khác được liệt kê trong các liên kết ở trên

Điều gây phiền toái là điều này đã hoạt động tốt cách đây vài tháng và giờ tôi nhận được lỗi này. Lúc đầu, tôi nghĩ rằng các cert hết hạn, nhưng nó có vẻ là tốt.

Nó có thể là một Gói dịch vụ hoặc Hotfix cho Windows Server đã tạo ra một thiết lập hoặc kịch bản mới phá vỡ SSL. Tôi nghĩ rằng việc cài đặt lại cert sẽ giải quyết điều đó.

Điều quan trọng cần lưu ý là khi tôi cài đặt lại, tôi chỉ cần thêm nó vào các cửa hàng khác nhau (Nhấp đúp vào chứng nhận và cài đặt). Tôi không tạo "Yêu cầu chứng chỉ". Kể từ khi nó đã được cài đặt và bị ràng buộc vào cổng SSL của ứng dụng IIS của tôi, nó sẽ là ok.

Đây là mã mà tạo ra các yêu cầu web:

 public static Hashtable DoWebReq(string strNVP, string strNVPSandboxServer) 
    { 
     ServicePointManager.Expect100Continue = true; 
     ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3; 

     string _strNVP = strNVP; 

     //Create web request and web response objects, make sure you using the correct server (sandbox/live) 
     var wrWebRequest = (HttpWebRequest)WebRequest.Create(strNVPSandboxServer); 
     wrWebRequest.Method = "POST"; // POST 

     var requestWriter = new StreamWriter(wrWebRequest.GetRequestStream()); 


     requestWriter.Write(_strNVP); 
     requestWriter.Close(); 

     // Get the response. 
     var hwrWebResponse = (HttpWebResponse)wrWebRequest.GetResponse(); 
     var responseReader = new StreamReader(wrWebRequest.GetResponse().GetResponseStream()); 

     //and read the response 
     string responseData = responseReader.ReadToEnd(); 
     responseReader.Close(); 

     string result = System.Web.HttpContext.Current.Server.UrlDecode(responseData); 

     string[] arrResult = result.Split('&'); 
     Hashtable htResponse = new Hashtable(); 
     string[] responseItemArray; 
     foreach (string responseItem in arrResult) 
     { 
      responseItemArray = responseItem.Split('='); 
      htResponse.Add(responseItemArray[0], responseItemArray[1]); 
     } 

     return htResponse; 
    } 

Dưới đây là một bộ sưu tập các ảnh chụp màn hình để hiển thị các thành phần khác nhau của máy SSL:

Đây là SSL Cài đặt ràng buộc trong IIS: SSL Bindings

Dưới đây là tổng quan về các cài đặt Certs: certs1

Đây là lỗi tôi nhận được: SSL Error

certs2

Certs cài đặt: enter image description here

Giấy chứng nhận chi tiết enter image description here

Lời khuyên nào về sửa chữa lỗi này sẽ là nhất đánh giá cao. Một số khả năng tôi đã xem xét nhưng không giải quyết là:

  1. Yêu cầu có thể mất quá nhiều thời gian? Có vẻ như đủ nhanh ... nhưng tôi đã đọc điều này có thể là một vấn đề.
  2. Trong Internet Explorer, tôi thấy "Thanh SSL" màu xanh lục cho biết trang web này được xác minh là an toàn. Điều này cho tôi biết Cert được cài đặt đúng, điều này có đúng không?
  3. Có thử nghiệm đơn giản nào tôi có thể thực hiện với yêu cầu HTTP của một số loại để giúp thu hẹp nguồn gốc của sự cố không?
  4. Điều này có liên quan gì đến PayPal không? Là nó có thể paypal là từ chối yêu cầu do thông tin đăng nhập vào cuối của họ?
  5. Việc triển khai ICertificatePolicy Interface có giúp ích gì trong việc gỡ lỗi vấn đề không? Tôi hy vọng tôi có thể sửa chữa nó.

Tôi nghĩ rằng SSL sẽ hoạt động được hay không, nó không mang/phụ thuộc vào PayPal chút nào ... nhưng tôi có thể sai.

Tôi cảm thấy mình có thể sử dụng URL cặp giá trị tên được lớp WebClient xây dựng và gửi qua đường ống qua IE và nhận phản hồi.

+0

Không chắc chắn nếu bạn vẫn cần nó - câu hỏi của bạn rất rộng rãi:) (đó là tốt, chỉ cần khó đọc nhanh qua nó), hy vọng tôi đã nhận nó đúng. Dù sao, tôi không có 'câu trả lời' nhưng điều này có thể giúp - bạn có thể muốn gỡ lỗi bằng cách sử dụng xác thực gọi lại - bạn cũng có thể xác thực theo cách thủ công (trả về true) xem có hoạt động không (không phải là giải pháp chỉ để kiểm tra, xem những gì xảy ra) - đây là mã "ServicePointManager.ServerCertificateValidationCallback + = new System.Net.Security.RemoteCertificateValidationCallback ((s, ce, ch, ssl) => true);" - và tra cứu "Sử dụng chứng chỉ tự ký với .NET" trên SO. – NSGaga

+1

Giới thiệu về câu hỏi chi tiết nhất mà tôi đã đọc trên SO, +1 –

Trả lời

1

Tôi nghĩ có khả năng vấn đề không nằm trong chứng chỉ ứng dụng khách của bạn, nhưng trong một trong PayPal.

Về câu hỏi của bạn:

Trong Internet Explorer, tôi thấy xanh "SSL Bar" trong đó cho thấy trang này được xác minh là an toàn. Điều này cho tôi biết Cert được cài đặt đúng, điều này có đúng không?

Không, điều này có nghĩa là chứng chỉ máy chủ PayPal được xác minh bởi trình duyệt của bạn, nghĩa là chứng chỉ của PayPal được ký bởi người được thêm làm cơ quan cấp chứng nhận. Tuy nhiên, chứng chỉ của PayPal không được thêm vào chứng chỉ tin cậy của bạn.

Tôi cũng nhận thấy rằng chứng chỉ hiện tại của PayPal có hiệu lực từ ngày 23.3.2011. Có lẽ cho đến lúc đó ứng dụng của bạn đang hoạt động, và bây giờ nó đã bị thay đổi, ứng dụng đã ngừng hoạt động.

Dựa trên điều này, tôi khuyên bạn nên thử cài đặt chứng chỉ của PayPal làm chứng chỉ máy chủ.

0

này khác SO câu trả lời có thể hỗ trợ:

Issue with Paypal Payments Pro

Nói tóm lại, bạn chỉ nên thử nó trên máy chủ PP sống và nhìn thấy nó nó hoạt động :)

Các vấn đề liên quan