2016-11-03 4 views
1

私たちは、どのミュールがHTTPS接続を行っているかを使って自己署名入りの証明書を持っています。それを動作させるために、私はカスタムBeanにHTTPSURLConnectionをカスタマイズして、allHostVerificationを許可しないようにしました。ミュールソフトカスタムコードがHTTPSURLConnectionをSSLのために変更するために呼び出す

 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のは、この動作のために修正されるとは思わない意味、効果にあるとは思えません。

私は、他のいくつかのコンポーネントをmuleで使用することになっているか、カスタムHTTPSURLConnectionをmuleに入れるのが正しいかどうかを教えてください。

答えて

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

関連する問題