我正在尝试进行相互验证…… 我目前的问题是无法使用域……看起来云耀斑没有转发我的证书。
基本上如果我直接访问 IP 就可以正常工作:
$ curl -k -E clientkey.pem https://18.228.142.39:8443/logged_info
(这很好用)
$ curl -E clientkey.pem https://xxx.mysite.com:8443/logged_info
(我得到 525:SSL 握手失败)
我已启用 ssl 调试器,但证书从未到达服务。
调用域时的一些 ssl 日志:
upcoming handshake states: server finished[20]
*** Certificate chain
https-jsse-nio-8443-exec-2, fatal error: 42: null cert chain
javax.net.ssl.SSLHandshakeException: null cert chain
%% Invalidated: [Session-1, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256]
https-jsse-nio-8443-exec-2, SEND TLSv1.2 ALERT: fatal, description = bad_certificate
https-jsse-nio-8443-exec-2, WRITE: TLSv1.2 Alert, length = 2
https-jsse-nio-8443-exec-2, fatal: engine already closed. Rethrowing javax.net.ssl.SSLHandshakeException: null cert chain
https-jsse-nio-8443-exec-2, called closeOutbound()
https-jsse-nio-8443-exec-2, closeOutboundInternal()
可能缺少启用的东西吗?
最佳答案
我认为 cloudflare 正在终止 TLS 连接,然后启动与您的来源的新连接,因此它不能(据我所知)只是通过代理证书,因为它从未在客户端看到私钥.它出现基于 this和 this如果您是企业客户,您可以将根 CA 提供给 cloudflare,他们将根据该 CA 为您验证客户端身份。第一篇文章还建议您可以打开“Authenticated Origin Pulls”,这将确保只有 cloudflare 可以直接与您的源服务器对话。
第二个链接还说:
For companies that use the client certificate for identification, Cloudflare can also forward any field of the client certificate as a custom header.
这表示您可以将一个字段从 key 转发到您的来源,以便您的来源可以知道请求来自谁。
关于spring-boot - Java + Cloudflare + 相互认证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53305623/