java - 使用 TLS 的 Apache HTTPClient

标签 java apache ssl httpclient

抱歉,我正在网上搜索这个,但我需要有人帮助我。 我已经为特定服务器编写了一个客户端,我正在使用 apache http 客户端与其通信。现在我已经将 TLS 置于通信之上,我想知道如何将我的客户端证书按顺序放入通信中使用 HTTPs。我对 java keystore et similia 不是很有信心,所以我需要有人帮助我。

最佳答案

keytool manual描述了如何操作 keystore 。您感兴趣的方法是 -importcert。

您应该首先找出您的客户端使用的信任库在哪里。它可以由 -Djavax.net.ssl.trustStore 指定javaopt,或者它可能是您的 JDK/JRE 安装的默认位置,其位置是 <java_home>/jssecacerts<java_home>/cacerts .

然后您应该检索服务器的证书。如果可以,您应该要求服务器的管理员以安全的方式提供它。否则,您可以通过不同的方式联系服务器,以便它提供其证书,在浏览器上访问其 https 界面越容易。

此时您可以在信任库中导入证书。如果您使用像 cacerts 这样的现有信任库,证书将被添加为一个新条目,或者您可以提供一个不对应于 -keystore 文件的路径。参数,在这种情况下,将在此位置创建一个以您的证书作为其唯一条目的新信任库。我会推荐后者,除非您的客户端稍后会与 CA 信任的服务器通信。

你的 keytool 命令应该看起来像这样:
keytool -importcert -alias <a name for the cert> -file <cert's path> -keystore <truststore's path> -storepass <the truststore's password>

如果您创建一个新的信任库,-storepass provided 将解锁它供以后使用,并且必须通过 -Djavax.net.ssl.trustStorePassword 指定给您的客户javaopt.如果您使用现有的信任库,则必须提供其密码(我相信 cacerts 的密码是 changeit )。

关于java - 使用 TLS 的 Apache HTTPClient,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33947687/

相关文章:

java - 从 onStopCommand 返回是否会结束 Android 服务?

apache - 保护 Apache 提供的静态内容

apache - 上传大于 10mb 的文件 - 通过 Mod_JK 连接的 Apache 2.4 和 JBoss EAP 7

java - 为什么 HttpsURLConnection.getServer Certificates() 在 Java 6 和 Java 7 中返回不同的结果?

javascript - 只要您从/向 HTTPS 页面发送数据,数据就安全吗?我仍然可以在 chrome 的网络开发者工具中看到表单数据

java - Chrome native 消息传递无法执行批处理文件

Java 流按 List<Map<String, Object>> 分组到 Map<Integer, List<Integer>>

php - 使用 htaccess 文件的多种语言的友好 php URL(从 URL 检测语言)

java - 将 SSL 证书导入 Eclipse

c# - 处理/.NET 互操作?