java - 提供自定义信任库时,Maven 不使用系统密钥库
问题描述
我们正在使用一个使用自签名 SSL 证书的私有 Maven 存储库。我们遵循了Maven 官方文档中的指南,它告诉您将 CA 证书放在自定义信任存储中,然后告诉 maven 使用它,例如使用环境变量MAVEN_OPTS
:
MAVEN_OPTS="-Xmx512m -Djavax.net.ssl.trustStore=trust.jks -Djavax.net.ssl.trustStorePassword=XXX
这确实修复了访问我们的私有仓库的 SSL 错误,但是现在 maven 找不到访问 Maven Central 的证书!似乎提供自定义信任存储会自动禁用将系统证书用于公共存储库。
另一个非常流行的 SO 问题提供了一种解决方法,但对我来说禁用 SSL 不是解决方案。
我希望提供自定义证书只会增加系统中的证书。
我们虽然将所有系统受信任的证书添加到自定义信任库,但认为这是一个乏味的解决方案。
解决方案
不幸的是,您不能将多个信任库(自定义 + 系统)传递给javax.net.ssl.trustStore
. 当信任库传递给该属性时,它基本上会忽略系统之一,因此为您提供了 2 个选项:
- 将所有系统受信任的证书添加到您的自定义信任库(繁琐但只是一次性或非常少见的操作)
- 获取由公共 CA 签名的证书。例如,您可以从https://letsencrypt.org/获得免费证书(它是一个受信任的公共 CA,我是否提到它是免费的?)。let's encrypt 的唯一缺点是证书的有效性,目前他们只颁发 3 个月的证书。
推荐阅读
- amazon-web-services - 在 AWS Api 网关自定义授权方中,如何根据对标头的验证将自定义标头添加到输入请求并发送到后端
- django - 在 Django 模板中循环
- java - 如何使用 JsonElement 在 Gson 中执行自定义序列化?
- debugging - 健全性和完整性
- java - 在 JSF Web 应用程序中使用 Jmeter 上传文件
- javascript - JSON.stringify 的单行输出
- c++ - 如果 dll 被锁定,LoadLibrary 会失败
- intellij-idea - 未解决的对 KFunctionN 的引用
- powershell - 使用 Powershell Set-AzureRmWebApp 函数设置 Azure 函数应用程序设置失败并出现错误请求错误
- android - Android WebView 仅显示黑屏,iframe 中包含全屏视频