从我们的 Springboot 应用程序中,我们需要连接到第 3 方服务。我们有第三方供应商提供的p12证书。
只需将 p12 证书导入为 pfx 文件,我就可以通过浏览器和邮递员客户端成功建立与该服务的通信。
现在我正在尝试在我的服务中导入或使用此 P12 证书进行通信。但不断收到以下错误。
feign.RetryableException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
我尝试过的方法:
- 使用 open ssl 命令提取证书并使用 keytool 从我的一个文件夹中的 p12 文件中导入 jks 信任库
-Djavax.net.ssl.keyStoreType=pkcs12
-Djavax.net.ssl.keyStore=C:\thirdparty.p12
-Djavax.net.ssl.keyStorePassword=<pwd>
-Djavax.net.ssl.trustStoreType=jks
-Djavax.net.ssl.trustStore=C:\\thirdparty.jks
-Djavax.net.ssl.trustStorePassword=<pwd>
- 按照https://dzone.com/articles/ssl-based-feignclient-example-in-java-microcervice的规定创建了一个自定义的 feignconfiguration
- 刚刚在 dockerfile 中导入 p12 证书并尝试运行 docker
RUN cd /usr/lib/jvm/java-1.8-openjdk/jre/bin && keytool -importkeystore -deststorepass changeit -
destkeypass changeit -destkeystore cacerts -deststoretype pkcs12 -srckeystore thirdparty.p12 -
srcstoretype PKCS12 -srcstorepass <pwd>
一切都给出了同样的错误。
我想我也错过了一些可能非常简单的东西。问题:
- 当我从供应商处获得 p12 文件时,是否需要为此创建单独的信任库?
- 有没有办法只用p12和密码建立通信?
- 我需要在服务级别或假客户端级别进行配置吗?
提前致谢。