0

우리는 .Net Framework 4.0 및 IIS 7을 사용하는 웹 사이트를 가지고 있습니다. Paypal의 최신 업데이트 이후 IPN 처리기가 더 이상 작동하지 않습니다. 우리는 닷넷 프레임 워크 4.0을 사용하는 것처럼 우리는 다음 줄에 추가 그래서 The request was aborted: Could not create SSL/TLS secure channel sandbox account : 기본 연결이 닫혔습니다 : :페이팔 응답 받기 TLS 1.2 .Net Framework 4.0

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; // SecurityProtocolType.Tls12 

이제 우리는 다른 오류를 보내기에서 예기치 않은 오류가 발생했습니다를 우리는이 오류를했다 .

응답을 처리하는 클래스가이 예 기반

지금 행하기 전에 첨가 후 https://mvcsamples.svn.codeplex.com/svn/trunk/Kona.Web/Controllers/PayPalController.cs

은 다음과 같다 :

private string GetPayPalResponse(Dictionary<string, string> formVals, bool useSandbox) 
{ 
     string paypalUrl = useSandbox ? "https://www.sandbox.paypal.com/cgi-bin/webscr" 
      : "https://www.paypal.com/cgi-bin/webscr"; 

     ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; // SecurityProtocolType.Tls12 

     HttpWebRequest req = (HttpWebRequest)WebRequest.Create(paypalUrl); 

     // Set values for the request back 
     req.Method = "POST"; 
     req.ContentType = "application/x-www-form-urlencoded"; 

     byte[] param = Request.BinaryRead(Request.ContentLength); 
     string strRequest = Encoding.ASCII.GetString(param); 

     StringBuilder sb = new StringBuilder(); 
     sb.Append(strRequest); 

     foreach (string key in formVals.Keys) 
     { 
      sb.AppendFormat("&{0}={1}", key, formVals[key]); 
     } 
     strRequest += sb.ToString(); 
     req.ContentLength = strRequest.Length; 

     //for proxy 
     //WebProxy proxy = new WebProxy(new Uri("http://urlort#"); 
     //req.Proxy = proxy; 
     //Send the request to PayPal and get the response 
     string response = ""; 
     using (StreamWriter streamOut = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII)) 
     { 
      streamOut.Write(strRequest); 
      streamOut.Close(); linea = 10; 
      using (StreamReader streamIn = new StreamReader(req.GetResponse().GetResponseStream())) 
      { 
       response = streamIn.ReadToEnd(); 
      } 
     } 
     return response; 
} 

예외가이 라인에서 발생된다

using (StreamWriter streamOut = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII)) 

우리가 .NET Framework 4.0에서 Paypal을 사용할 수 있는지 확실하지 않습니다. 우리가 추가 한 라인을 사용하는 것이 가능하다고합니다. 그러나 작동하지 않습니다. 코드 또는 IS 7에서 수행해야 할 변경이 더있을 수 있습니다. 그러나 예제를 찾을 수 없습니다.

도움 주셔서 감사합니다.

편집 : 나는 거의 프로젝트는 .NET 프레임 워크 4.5가 아니라 Visual Studio 2010에서 Visual Studio 2010를 사용하여 개발되는 것을 언급하는 것을 잊었다

.

편집 2 : https://blogs.msdn.microsoft.com/kaushal/2011/10/02/support-for-ssltls-protocols-on-windows/ 을하지만 그 후 나는이의 새로운 업데이트를 발견 : 나는이 문제를 조사하고 나는 우리 서버 윈도우 서버 2008 TLS 1.2 (표에서 볼)을 지원하지 않은 것을 발견

모든 버전의 SQL Server에 대해 2016 년 https://blogs.msdn.microsoft.com/sqlreleaseservices/tls-1-2-support-for-sql-server-2008-2008-r2-2012-and-2014/ http://blogs.sqlsentry.com/aaronbertrand/tls-1-2-support-read-first/

하지만 결국에 몇 가지 이유에 대한 내 상사가 서버 새 업데이트를 사용하거나 등록 방법을 사용하여 갱신하지 않기로 결정 .

그래서 어떤 솔루션을 증명할 수는 없습니다. 문제를 일으켜서 미안 해요.

+0

TLS 1.2 및 TLS 1.1은 (는) 다음 웹 사이트에서 제공됩니다. Framework 4.0에서 지원되지 않음 – FabioThorin

+0

이 문제점에 대한 해결책을 찾았습니까? 우리는 .NET 4.6.1을 사용하므로 Tls | Tls11 | ServicePointManager.SecurityProtocol에 대한 Tls12. Tls12가 설정된 후 "기본 연결이 닫혔습니다."라는 두 번째 예외로 고민하고 있습니다. 일은 낭비없이 낭비됩니다. 내가 뭘하려고해도이 예외가 생깁니다. 외관상으로는 다른 어떤 것이 설정되거나 구성되어야하지만 무엇이 필요합니까? – Alex

답변

0

최근 Salesforce에서 비슷한 문제가 발생했습니다. 그들은 Tls 1.0 지원을 비활성화합니다.

은 4.5 .NET으로 업그레이드하는 경우, 당신은 당신이 호출하기 전에이 코드

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12을 추가 할 수 있습니다 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;

.net 4.5로 업그레이드 할 수없는 경우 일부 레지스트리 값을 설정할 수 있습니다. 여기에 정보가 있습니다 https://help.salesforce.com/apex/HTViewSolution?id=000221207

기본적으로 .NET 4.0은 TLS 1.2를 활성화하지 않습니다. 기본적으로 TLS 1.2를 사용하려면 다음 두 레지스트리 키의 SchUseStrongCrypto DWORD 값을 1로 설정하고 "HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft.NETFramework \ v4.0.30319"및 "HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft.NETFramework \ v4.0.30319 "로 변경하십시오. 그러나 이러한 레지스트리 키를 사용하면 TLS 1을 사용할 수 있습니다.2에 설치되어있는 모든 .NET 4.0, 4.5, 4.5.1 및 4.5.2 응용 프로그램에 기본적으로 설치됩니다. 프로덕션 서버에 배포하기 전에이 변경을 테스트하는 것이 좋습니다. 이 파일은 레지스트리 가져 오기 파일로도 사용할 수 있습니다. 그러나 이러한 레지스트리 값은 System.Net.ServicePointManager.SecurityProtocol 값을 설정하는 .NET 응용 프로그램에는 영향을 미치지 않습니다.

+0

나는 내 게시물을 편집했지만 명확하게했습니다. NET 4.5를 사용하여 프로젝트에서이 문제를 실행하려고 시도했지만 TLS 1.2 또는 TLS 1.1이 작동하지 않는 것으로 나타났습니다. 문제는 응용 프로그램이 아니라 서버에있었습니다. – ajmena