首页 > 解决方案 > 提供自定义信任库时,Maven 不使用系统密钥库

问题描述

我们正在使用一个使用自签名 SSL 证书的私有 Maven 存储库。我们遵循了Maven 官方文档中的指南,它告诉您将 CA 证书放在自定义信任存储中,然后告诉 maven 使用它,例如使用环境变量MAVEN_OPTSMAVEN_OPTS="-Xmx512m -Djavax.net.ssl.trustStore=trust.jks -Djavax.net.ssl.trustStorePassword=XXX

这确实修复了访问我们的私有仓库的 SSL 错误,但是现在 maven 找不到访问 Maven Central 的证书!似乎提供自定义信任存储会自动禁用将系统证书用于公共存储库。

另一个非常流行的 SO 问题提供了一种解决方法,但对我来说禁用 SSL 不是解决方案。

我希望提供自定义证书只会增加系统中的证书。

我们虽然将所有系统受信任的证书添加到自定义信任库,但认为这是一个乏味的解决方案。

标签: javamavenssl

解决方案


不幸的是,您不能将多个信任库(自定义 + 系统)传递给javax.net.ssl.trustStore. 当信任库传递给该属性时,它基本上会忽略系统之一,因此为您提供了 2 个选项:

  1. 将所有系统受信任的证书添加到您的自定义信任库(繁琐但只是一次性或非常少见的操作)
  2. 获取由公共 CA 签名的证书。例如,您可以从https://letsencrypt.org/获得免费证书(它是一个受信任的公共 CA,我是否提到它是免费的?)。let's encrypt 的唯一缺点是证书的有效性,目前他们只颁发 3 个月的证书。

推荐阅读