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)입니다. 그래서 제 서버가 작동합니다.
감사합니다. @ dave_thompson_085! 그것은 작동합니다! –