2016-12-29 3 views
0

apache.httpcomponent.httpcore 및 httpclient 버전 4.3을 사용하여 httclient를 사용하여 https 서버에 게시하려고합니다. 그러나 wireshark를 사용하여 패킷을 잡을 때 패킷은 TLS가 아닌 TCP입니다. 아무도 그 이유를 말할 수 있습니까?TLS를 사용하는 Apache HTTPClient는 wireshark에서 tls 패킷을 catch 할 수 없습니다.

다음 코드는 trustManager와 함께 SSLContext를 구성합니다. 그리고 트러스트 매니저에 서버 인증서를로드합니다.

SSLContext ctx = null; 
String keystoreName = "/Users/user/ec_key/in_keystore"; 
char[] password = "123456".toCharArray();  //keystore's password 

    FileInputStream fIn; 
    KeyStore keystore; 
    TrustManagerFactory tmf=null; 

    try { 
     fIn = new FileInputStream(keystoreName); 
     keystore = KeyStore.getInstance("JKS"); 
     keystore.load(fIn, password);    //loading keysotre 

     tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); //TrustManagerFactory.getDefaultAlgorithm()=PKIX 
     tmf.init(keystore); 

     ctx = SSLContext.getInstance("TLSv1.2"); 
     // Initial SSLContext 
     ctx.init(null, tmf.getTrustManagers(), new java.security.SecureRandom()); 

     fIn.close(); 

    } catch (FileNotFoundException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } catch (KeyStoreException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (NoSuchAlgorithmException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (CertificateException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (KeyManagementException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

     // create SSLConnectionSocketFactory 
     SSLConnectionSocketFactory factory = new SSLConnectionSocketFactory(ctx); 

    CloseableHttpClient httpClient = HttpClientBuilder.create() 
      .setSSLSocketFactory(factory) 
      .disableAutomaticRetries() 
      .build(); 

//execute http method 
HttpResponse httpResponse = httpClient.execute(method); 

서버에 자체 서명 된 인증서를 사용합니다. 그리고 내 서버를 연결하는 데

openssl s_client -connect 127.0.0.1:8443/webpage -CAfile test-ca.crt 

을 사용합니다. test-ca.crt는 내 CA의 인증서입니다. 결과는 확인 리턴 코드가 0 (ok)입니다. 그래서 제 서버가 작동합니다.

답변

1

캡쳐 된 패킷이 정상입니다. Wireshark 은 소스 및/또는 목적지로 사용되는 포트를 (주로) 기반으로 디스플레이을 디코딩합니다. 443 및 465와 같은 일부 표준 포트는 SSL/TLS이지만 8443은 알지 못합니다.

메시지 목록 창에서이 세션에 대한 패킷을 마우스 오른쪽 버튼으로 클릭하고 DecodeAs ...를 선택하거나 패킷을 선택하고 분석을 클릭하십시오./DecodeAs .... 그리고 버전 2에서는 '+'(추가) 버튼을 클릭하십시오; 필요하면 (8443까지) 포트 번호를 조정하고 오른쪽 풀다운 (또는 버전 1 목록 상자)에서 SSL을 선택하십시오.

+0

감사합니다. @ dave_thompson_085! 그것은 작동합니다! –

관련 문제