使用来自 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 "****"
; ...
我们正在使用 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 "****"
; ...