2017-02-15 2 views
0

이것은 Dynamics CRM Online의 CodeActivity에서 웹 요청의 예입니다.C# Dynamics CRM Online "요청이 중단되었습니다. SSL/TLS 보안 채널을 만들 수 없습니다."

public class CodeActivity1 : CodeActivity 
{ 
    protected override void Execute(CodeActivityContext context) 
    { 

     var postUrl = "https://jsonplaceholder.typicode.com/posts/"; 
     var request = (HttpWebRequest)WebRequest.Create(postUrl); 
     request.Method = "GET"; 
     request.ContentType = "application/xml"; 
     request.ContentLength = 0; 

     HttpWebResponse webresponse = (HttpWebResponse)request.GetResponse(); 
     Encoding enc = System.Text.Encoding.GetEncoding("utf-8"); 
     StreamReader responseStream = new StreamReader(webresponse.GetResponseStream(), enc); 

     var result = responseStream.ReadToEnd(); 
     webresponse.Close(); 
     ..... 

    } 
... 
} 

"요청이 중단되었습니다. SSL/TLS 보안 채널을 만들 수 없습니다."라는 메시지가 나타납니다. 오류. Microsoft 설명서 (https://msdn.microsoft.com/en-us/library/gg334752.aspx)에는 다음과 같은 제한 사항이 있습니다.

  • HTTP 및 HTTPS 프로토콜 만 허용됩니다.
  • 로컬 호스트 (루프백)에 대한 액세스가 허용되지 않습니다.
  • IP 주소를 사용할 수 없습니다. DNS 이름 확인이 필요한 이름이 지정된 웹 주소를 사용해야합니다.
  • 익명 인증이 지원되며 권장됩니다. 로그온 한 사용자에게 자격 증명을 요청하거나 자격 증명을 저장하는 방법은 없습니다.

문제의 성격과 관련된 의견이나 제안이 있으십니까 ??

+0

이 유형의 CRM 오류는 일반적으로 인증에 문제가 있음을 나타냅니다. 요청과 함께 인증 정보를 전달할 필요가 없습니까? – Nathan

+0

@Nathan 서비스 https://httpbin.org/get은 공개이므로 인증이 필요하지 않습니다. –

답변

0

환경에 따라 서버 인증서를 변경하는 경우가 있습니다. 많은 스니핑 앱이이를 수행 할 수 있습니다 (예 : Fiddler). 즉, httpbin.org에서 가져온 인증서가 올바른지 확인하십시오. 내가 누군가에게 도움이 될 수 있다는 희망 scriptin 정확한를 다시 작성

ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true; 
+0

답장을 보내 주셔서 감사합니다. 표시된 코드를 삽입하면 다음 오류가 발생합니다. System.Security.SecurityException : \t \t 'System.Security.Permissions.SecurityPermission, mscorlib, 버전 = 4.0.0.0, 문화 = 중립, \t PublicKeyToken = b7aa5c561934e089'형식의 사용 권한 요청이 실패했습니다. Microsoft.Crm.Sandbox.SandboxCodeUnit.Execute (IExecutionContext context) Microsoft.Crm.Workflow.Services.ProxyCustomActivity.Execute (CodeActivityContext executionContext) –

+1

좋아, 샌드 박스 격리 모드에서 HTTP 및 HTTPS는 내가 생각할 수있는 한 가지 허용됩니다. 이 서버 인증서를 확인할 수 없다는 것입니다. 플러그인에서 예를 들어 https://msdn.microsoft.com에 액세스 할 수 있는지 확인할 수 있습니까? – pen2

+0

인증서에 문제가있을 수 있습니다. 괜찮습니다. "https://httpbin.org/get" ko "https://jsonplaceholder.typicode.com/posts/1" 차이점은 무엇입니까? –

0

: 문제는 코드의 시작 부분에있는 인증서 오류를 무시 검증 핸들러를 추가하여 서버 인증서의 유효성을 검사에 있는지 확인할 수 있습니다. 제안에 대한 @pen 덕분에

public class CodeActivity1 : CodeActivity 
{ 
    protected override void Execute(CodeActivityContext context) 
    { 

      ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; 

      ITracingService tracingService = context.GetExtension<ITracingService>(); 
      var postUrl = "https://jsonplaceholder.typicode.com/posts/1"; 

      var request = (HttpWebRequest)WebRequest.Create(postUrl); 
      request.Method = "GET"; 
      request.ContentType = "application/xml"; 
      request.ContentLength = 0; 
      request.ServicePoint.Expect100Continue = true; 

      HttpWebResponse webresponse = (HttpWebResponse)request.GetResponse(); 
      Encoding enc = System.Text.Encoding.GetEncoding("utf-8"); 
      StreamReader responseStream = new StreamReader(webresponse.GetResponseStream(), enc); 

      var result = responseStream.ReadToEnd(); 
      webresponse.Close(); 
      ..... 
    } 
... 
} 
+1

TLS 1.2 - 회사는 TLS1.1보다 더 적은 것을 전환 할 것이라고 1 년 넘게 경고했습니다. Sabre 및 Amadeus와 같은 GDS는 2015 년 12 월 TLS1.2로 전환되었습니다.'ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12' 만 사용했을 수 있습니다. 또한 .NET 4.5.2가 설치되어 있지 않으면이 기능이 작동하지 않습니다. –

+0

어쨌든 HttpClient를 사용하지 않는 이유는 무엇입니까? –

+0

@Panagiotis : Kanavos HttpClient를 사용하는 이유는 무엇입니까? 내 요구 사항은 나머지를 테스트하는 것입니다. –

관련 문제