抱歉,我正在网上搜索这个,但我需要有人帮助我。 我已经为特定服务器编写了一个客户端,我正在使用 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/