2016-11-03 2 views
1

우리는 뮬이 HTTPS 연결을 사용하고있는 자체 서명 된 인증서를 가지고 있습니다. 작동 시키려면 HTTPSURLConnection을 사용자 정의하여 allHostVerification을 허용하지 않는 사용자 정의 bean을 시도했습니다.Mule soft 패스로 HTTPSURLConnection을 변경하기 위해 호출하는 코드

 import java.security.SecureRandom; 
     import java.security.cert.X509Certificate; 

     import javax.net.ssl.HostnameVerifier; 
     import javax.net.ssl.SSLSession; 
     import javax.net.ssl.HttpsURLConnection; 

     import javax.net.ssl.SSLContext; 
     import javax.net.ssl.TrustManager; 
     import javax.net.ssl.X509TrustManager; 

     public class SelfSignSSLProcessor { 


     public void workAroundSelfSignedCerts() { 
      // Create a trust manager that does not validate certificate chains 
      TrustManager[] trustAllCerts = new TrustManager[] { 

      new X509TrustManager() { 
       public X509Certificate[] getAcceptedIssuers() { 
        return null; 
       } 
      public void checkClientTrusted(X509Certificate[] certs, String authType) { } 
      public void checkServerTrusted(X509Certificate[] certs, String authType) { } 
      } 
     }; 
      // Install the all-trusting trust manager 
      System.out.println("Allow Self Signed Certificates"); 
      try { 
      SSLContext sc = SSLContext.getInstance("SSL"); 
      System.out.println("SSL Context Object" + sc.toString()); 
      sc.init(null, trustAllCerts, new SecureRandom()); 
      HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); 
      // Create all-trusting host name verifier 

      HostnameVerifier allHostsValid = new HostnameVerifier() { 
       public boolean verify(String hostname, SSLSession session) { 
        System.out.println("Host Name to Verify" + hostname); 
        return true; 

       } 
      }; 
      // Install the all-trusting host verifier 
      HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid); 
      // System.out.println("HTTP URL Connection for all SSL" + HttpsURLConnection.getDefaultHostnameVerifier()); 
      } 
      catch (Exception e) { 
       // do something here please! 

       e.printStackTrace(); 
       } 
      } 


     } 

다음과 같이 HTTPS 호출 바로 앞에 invoke 함수를 넣음으로써 이것을 호출하려고합니다.

   <flow name="cprimeFlow"> 
        <poll doc:name="Poll"> 
         <fixed-frequency-scheduler frequency="2" timeUnit="SECONDS"/> 
         <dw:transform-message doc:name="Transform Message"> 
          <dw:set-payload><![CDATA[%dw 1.0 
      %output application/java 
      --- 
      { 
      }]]></dw:set-payload> 
         </dw:transform-message> 
        </poll> 
        <invoke object-ref="SelfSignSSLProcessor" method="workAroundSelfSignedCerts" doc:name="Invoke"/> 
        <http:request config-ref="CPRIME_HTTPS" path="Devices" method="GET" doc:name="HTTP"> 
         <http:request-builder> 
          <http:query-param paramName=".full" value="true"/> 

          <http:header headerName="Connection" value="close"/> 
          <http:header headerName="max-age" value="0"/> 
          <http:header headerName="Cache-Control" value="no-cache,no-store,must-revalidate"/> 
          <http:header headerName="Expires" value="0"/> 
         </http:request-builder> 
        </http:request> 
        <logger message="CPRIME OUT Call Logs - [#[message.payloadAs(java.lang.String)]" level="INFO"    doc:name="Logger"/> 
       </flow> 
      </mule> 

그러나 이것은 내가 커넥터 구성 htttps의 HttpsURLConnection는이 문제에 대한 수정 생각하지 않는다 의미, 효과가 될 것 같지 않습니다.

노새에 다른 구성 요소를 사용하고 싶거나 사용자 지정 HTTPSURLConnection을 노새에 넣는 올바른 방법이 무엇인지 알려주세요.

답변

1

HTTP 커넥터에는 작동하지 않습니다. Mule 3.8.0 이상을 사용한다면 요청 구성이 "안전하지 않은"신뢰 저장소를 가진 TLS 컨텍스트를 사용함으로써 원하는 결과 (유효성 검사 없음)를 얻을 수 있습니다. here에 대한 자세한 내용을 볼 수 있습니다 ("안전하지 않은 옵션"섹션 참조). HTH

+0

나는 뮬 3.8에 해당 옵션이 있음을 알고 있습니다. 3.8에서이 작업을 수행 할 수 있었지만 인프라 팀은 아직 업그레이드 할 준비가되지 않았습니다. 어떤 인증서를 허용하도록 JVM을 설정하는 것을 제외하고는 3.7에서 작동하도록하는 방법이 있습니까? – skumar

+0

내가 아는 것은 아닙니다. 당시에는 "-Dcom.ning.http.client.AsyncHttpClientConfig.acceptAnyCertificate = true"시스템 속성을 사용하여 호스트 이름 확인을 비활성화했지만 모든 유효성 검사를 비활성화 할 수 없음을 알았습니다. 또한 모든 앱의 모든 요청자 구성 요소에 영향을 미칩니다. – afelisatti

+0

좋아, 좋지 않다. 그런데 내가 사용하고있는 커넥터는 HTTPS skumar