Java 不信任 Windows 上的任何 SSL 证书

问题描述 投票:0回答:2
使用 Maven 或 Gradle 构建时,依赖项下载过程失败,因为 Java 不信任 Windows 上的任何 SSL 证书。有没有办法让 Java 信任 Maven 存储库中的证书?

提前致谢

java ssl gradle
2个回答
2
投票
有多种方法可以做到这一点。

1)您可以使用 keytool 命令将 Maven 存储库的所有 CA 和中间证书添加到 Java 信任存储中。 你可以通过

来做到这一点

openssl s_client -showcerts -connect <SERVER>:443 </dev/null 2>/dev/null|openssl x509 -outform PEM >certificate.pem

这会将证书保存在名为 cert.pem 的本地文件中 现在您已将此证书添加到您的信任存储中 转换为 .der 格式

openssl x509 -outform der -in certificate.pem -out certificate.der

添加到信任存储。

keytool -import -alias your-alias -keystore cacerts -file certificate.der

2)如果您想绕过信任,您可以在运行 mvn 时使用以下属性。 -Dmaven.wagon.http.ssl.insecure=true

3)如果您计划绕过 Java Trsut 存储并希望使用自己的信任存储,您可以设置 MAVEN_OPTS 环境变量

MAVEN_OPTS="-Xmx512m -Djavax.net.ssl.trustStore=trust.jks \ -Djavax.net.ssl.trustStorePassword= \ -Djavax.net.ssl.keyStore=/home/directory/mycertificate.p12 \ -Djavax.net.ssl.keyStoreType=pkcs12 \ -Djavax.net.ssl.keyStorePassword=XXXXXX"

参考:

https://maven.apache.org/guides/mini/guide-repository-ssl.html


1
投票
解决该问题并使其在现在和将来发挥作用的简单且可能的方法是将Maven的公共证书添加到Java可信存储(即java密钥存储)中。

创建自己的 java 密钥存储并将其映射到默认值将是一项艰巨的任务。

拿到证书(Maven的公共证书)即可,然后按照 以下步骤

如果服务器支持https,您可以使用openssl客户端或任何浏览器来获取公共数字证书。您可以单击在浏览器中查看证书,然后通过单击地址栏上最左侧的图标进行保存(带有 https 标记{必须标记或红色,因为证书不受信任}符号)

通过openSSL命令获取证书(我假设你在windows中默认没有openssl,所以最好按照浏览器的方法,否则下载一个SSL客户端来获取证书,如果你可以的话我可以给你工具名称找不到任何工具)。

获得证书后请按照以下步骤操作。

1)进入你的【Java安装路径】\jre\lib\security

2)(Windows) 使用“cmd”和 CTRL+SHIFT+ENTER 打开管理命令行

(请确保命令提示符下位于[Java安装路径]\jre\lib\security,否则必须将路径设置为系统 环境变量)

3)运行keytool导入证书:

.... in\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias yourAliasName -file 小路

© www.soinside.com 2019 - 2024. All rights reserved.