使用来自 Kubernetes 的客户端证书调用端点时出现 SunCertPathBuilderException Docker

SunCertPathBuilderException when calling endpoint using client-side certificate from Kubernetes Docker

我们正在使用 clj-http 和一个由 keystore.pfx 和自签名证书组成的密钥库:

(let [url (str url "api/fetch")
      opts {:keystore "keystore.pfx"
            :keystore-type "pkcs12"
            :keystore-pass "****"
            :body (json/encode {:method "yada"})
            :content-type :json
            :throw-entire-message? true
            :async? false}
      response (http/post url opts)]
  (-> response
      :body
      base64-decode))

使用密钥库的 API 调用在本地工作以使用客户端证书调用 API,但在 Kubernetes 上的 Docker 中不调用。

例外情况是:

sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

有什么解决办法吗?我们需要以某种方式将它添加到 JVM 中吗?如果是这样,在哪里以及如何添加 pfx?

您的自签名 client/server 证书不共享信任链(这就是错误消息告诉您的内容)。

将 CA 证书放入信任库,例如

keytool -importcert -noprompt -alias ca -file ca.crt -keystore truststore -storepass secret

并将信任库添加到请求中:

  ; ...
  :trust-store "truststore"  ; XXX
  :trust-store-pass "secret" ; XXX
  :keystore "keystore.pfx"
  :keystore-pass "****"
  ; ...