2015-04-12 66 views
3

我不知道如何以編程方式禁用CXF 3.0.4 JAX-RS 2.0客戶端的CN檢查。我的代碼如下:如何禁用CN檢查CXF 3.0.0 + jax-rs 2.0客戶端

 System.setProperty("jsse.enableSNIExtension", "false"); 
 
     HttpsURLConnection.setDefaultHostnameVerifier( 
 
     new HostnameVerifier(){ 
 

 
      public boolean verify(String hostname, 
 
        SSLSession sslSession) { 
 

 
        return true; 
 
      
 
      } 
 
     }); 
 
      Client client = ClientBuilderImpl.newClient(); 
 
      String urlHost = "https://" + centralNode; 
 
      WebTarget target = client.target(urlHost).path(BASE_SERVICE_URL); 
 
      String encodedpw = Base64.encodeBase64String(passwd.getBytes()); 
 
      String body = "{\"uid\" : \"" + uid + "\",\"password\": \"" + encodedpw + "\"}"; 
 
      Response res = target.request(MediaType.APPLICATION_JSON).post(Entity.entity(body, MediaType.APPLICATION_JSON));

正如你所看到的,我已經嘗試覆蓋默認的HostnameVerifier,並設置jsse.enableSNIExtension爲false。這些工作都沒有,我仍然得到例外:

「https URL主機名與客戶端的信任庫中的服務器證書上的通用名稱(CN)不匹配。請確保服務器證書是正確的,或禁用此檢查(不推薦用於生產)將CXF客戶端TLS配置屬性「disableCNCheck」設置爲true。「

請幫忙!

+1

您知道,禁用主機名檢查與禁用任何類型的證書驗證實際上是一樣的,因爲現在攻擊者可以使用由受信任的CA簽署的任何證書,而不僅僅是與主機名匹配的證書? –

回答

6

您正在查找此代碼段;

 HTTPConduit httpConduit=(HTTPConduit)ClientProxy.getClient(SAMPLE_PORT).getConduit(); 
     TLSClientParameters tlsCP = new TLSClientParameters(); 
     tlsCP.setDisableCNCheck(true); 
     httpConduit.setTlsClientParameters(tlsCP); 

請務必在測試環境中使用此代碼。

+0

SAMPLE_PORT應該如何顯示?我是新手,需要嘗試解決這個問題 –

相關問題