1

从我们的 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

我尝试过的方法:

  1. 使用 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>
  1. 按照https://dzone.com/articles/ssl-based-feignclient-example-in-java-microcervice的规定创建了一个自定义的 feignconfiguration
  2. 刚刚在 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>

一切都给出了同样的错误。

我想我也错过了一些可能非常简单的东西。问题:

  1. 当我从供应商处获得 p12 文件时,是否需要为此创建单独的信任库?
  2. 有没有办法只用p12和密码建立通信?
  3. 我需要在服务级别或假客户端级别进行配置吗?

提前致谢。

4

2 回答 2

1
  1. 在浏览器中打开 URL 并导出证书。

  2. 查找cacerts文件的位置:

    示例:C:\Program Files(x86)\Java\jre1.6.0_22\lib\security\cacerts。

  3. 在命令行中将 .cer 文件导入 cacerts:

    keytool -import -alias example -keystore C:\Program Files (x86)\Java\jre1.6.0_22\lib\security\cacerts -file example.cer

注意:如果要求输入密码,请输入:changeit

重新启动您的 JVM/PC。

于 2020-06-28T19:52:36.647 回答
0

感谢您的意见阿米特库马尔。

是的,它通过在 Truststore 中导入证书并提供我在问题中提到的密钥库来工作。

但是 Springboot JPA Hikari 会自动尝试验证我在 java 命令行中提供的 Trustcertificates,因此服务器没有启动。

现在正试图解决这个问题。

于 2020-06-30T19:38:56.617 回答