maven"无法找到所请求目标的有效证书路径" - letsencrypt ssl证书

Ret*_*ner 5 apache ssl maven lets-encrypt

我最近切换到了我的maven repo的letsencrypt证书(Apache代理背后的Artifactory).通过浏览器进行回访访问工作正常,证明证书没有问题(下面的截图).

如果我手动将证书导入java密钥库,它也可以工作.

但根据这个问题,Java应该接受以8u101开头的letsencrypt证书.

我总是得到这个例外:

sun.security.validator.ValidatorException:
PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException:
unable to find valid certification path to requested target -> [Help 1]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

在此输入图像描述

C:\myproject>mvn -version
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T17:41:47+01:00)
Maven home: C:\maven
Java version: 1.8.0_112, vendor: Oracle Corporation
Java home: C:\jdk1.8_win64\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 10", version: "10.0", arch: "amd64", family: "dos"
Run Code Online (Sandbox Code Playgroud)

Ret*_*ner 5

3个月后终于明白了

\n\n

Maven 工件存储库前面的 apache 服务器未配置为提供链中的中间证书。

\n\n

我下载了中间证书 - Let\xe2\x80\x99s Encrypt Authority X3(IdenTrust 交叉签名) - 并配置了 apache 来为其提供服务。

\n\n

实际上,该domain.crt文件包含域和中间证书,对于我所有的测试浏览器来说,这总是足够好的。但那一台机器上的 eclipse/maven 设置无法处理它。

\n\n

在SSL 实验室检查告诉我证书链不完整之后(尽管似乎没有浏览器似乎关心),我才开始研究 apache 配置。

\n\n

前:

\n\n
  SSLEngine On\n  SSLCertificateFile "path/to/domain.crt"\n  SSLCertificateKeyFile "path/to/domain.key"\n
Run Code Online (Sandbox Code Playgroud)\n\n

后:

\n\n
  SSLEngine On\n  SSLCertificateFile "path/to/domain.crt"\n  SSLCertificateKeyFile "path/to/domain.key"\n  SSLCertificateChainFile "path/to/letsencrypt-authority-x3-identrust.pem"\n
Run Code Online (Sandbox Code Playgroud)\n

  • 这个答案给了我很大的帮助——谢谢!请注意,默认情况下,LetsEncrypt 机器人应为您下载此文件,并将其存储在“/etc/LetsEncrypt/Live/$DOMAIN/Chain.pem”中。根据您的回答,用此文件更新我的配置解决了我的问题。 (3认同)