【问题标题】:java trust unix certificate storejava 信任 unix 证书存储
【发布时间】:2017-10-20 08:34:16
【问题描述】:

我已将 crt 添加到 /etc/pki/ca-trust/source/anchors 以便服务器证书可以被 ssl 客户端信任。因此,例如,当我 curl https://<server> 时,证书会自动被信任。

有没有办法让java应用程序信任系统上安装的证书?

在将证书添加到 jvm 信任库的 java 中,唯一的方法是使其工作吗?

问候

【问题讨论】:

    标签: java ssl-certificate


    【解决方案1】:

    我不知道任何开箱即用的解决方案。我认为有多种方法可以实现您的目标:

    1. 编写一个类来同步您定义的信任存储和证书目录
    2. 编写一个自己的基于 cert 目录的 TrustManager 实现

    【讨论】:

      【解决方案2】:

      将其导入您的 JRE 中的 cacerts 文件,如果您有 JDK,请将其导入。

      【讨论】:

      • “在 java 中添加证书到 jvm 信任库是唯一的方法吗?”
      • 我建议不要更改 Java 提供的 CA 证书,而是指定您自己的信任库。或者,正如获得最多支持的答案所指定的那样,创建您自己的 TrustManager 实现。
      【解决方案3】:

      导入cacert文件中的证书


      下面是路径
      C:\Program Files (x86)\Java\jre1.8.0_121\bin

      使用此代码导入(假设您的*.cer文件名为abc.cer,您需要将abc.cer文件粘贴到bin文件夹中,然后在CMD中使用与bin相同的路径运行以下代码)keytool -import -file abc.cer -alias anyName -keysotre cacert -trustcacerts

      【讨论】:

      • OP 正在使用 Unix。
      • @KlitosKyriacou 感谢更新,在这种情况下,他/她需要使用 OpenSSL 并将环境变量设置为特定路径。代码保持不变
      • 他们每次升级 JRE 或 JDK 时都必须运行 keytool 吗?这显然是 OP 试图避免的。
      • @DodgyCodeException 查看 JDK 或 JRE 是否正在升级,然后它有自己的 cacert 文件。要么重新导入 abc.cer,要么从之前的版本中复制 cacert 文件并粘贴到最新版本的路径中。确保备份最新的 cacert 文件
      • 但仅此而已。 OP 想要一个单一的系统范围的密钥库。许多类 Unix 系统中已经有一个,它被各种工具和应用程序使用。然而,Java 应用程序是一个例外,因为要使它们工作,您必须将证书添加到系统上的每个 JRE 版本。它打破了 DRY(不要重复自己)原则。
      猜你喜欢
      • 2020-07-20
      • 1970-01-01
      • 2019-02-26
      • 2013-05-16
      • 1970-01-01
      • 1970-01-01
      • 2021-03-21
      • 2013-06-04
      • 1970-01-01
      相关资源
      最近更新 更多