gpt4 book ai didi

java - 带有 TLS 的 Apache httpclient,但无法在 wireshark 中捕获 tls 数据包

转载 作者:太空宇宙 更新时间:2023-11-03 13:51:42 25 4
gpt4 key购买 nike

我使用 apache.httpcomponent.httpcore 和 httpclient 4.3 版,我想使用 httpclient 发布到我的 https 服务器。但是当我使用 wireshark 捕获数据包时,数据包是 TCP 而不是 TLS。谁能告诉我为什么?

下面的代码是我用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)。所以我的服务器正常工作。

最佳答案

捕获的数据包没有问题。 Wireshark 解码显示(主要)基于用作源和/或目标的端口。它知道一些标准端口,如 443 和 465 是 SSL/TLS,但它不知道 8443。

在消息列表 Pane 中右键单击此 session 的数据包并选择 DecodeAs...,或选择一个数据包并单击 Analyze/DecodeAs...。在版本 2 中单击“+”(添加)按钮;然后根据需要调整端口值(至 8443)并在右侧下拉列表(或版本 1 列表框中)选择 SSL。

关于java - 带有 TLS 的 Apache httpclient,但无法在 wireshark 中捕获 tls 数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41372311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com