spring-boot - Java + Cloudflare + 相互认证

标签 spring-boot ssl cloudflare

我正在尝试进行相互验证…… 我目前的问题是无法使用域……看起来云耀斑没有转发我的证书。

基本上如果我直接访问 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 连接,然后启动与您的来源的新连接,因此它不能(据我所知)只是通过代理证书,因为它从未在客户端看到私钥.它出现基于 thisthis如果您是企业客户,您可以将根 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/

相关文章:

ruby-on-rails - 让我们在同一个 DigitalOcean Droplet 上的 Node 和 Rails 应用程序上加密 SSL。适用于 Rails,但不适用于 Node

Azure Web 测试 - 使用 CloudFlare SSL 时无法创建 SSL/TLS 安全通道

java - Spring Boot - 批量更新单独插入记录而不是批量插入记录

ios - 令人困惑的 SSL 证书错误 - 是否允许端口号?

java - 我可以 Autowiring 适配器类吗?

python - 每个域/url "SSLError certificate verify failed"

wordpress HTTPS 红线错误

javascript - 页面加载时的 HtmlUnit JavaScript 问题 - 找不到函数

java - 为什么我的spring boot应用会自动关闭?

java - Spring:引用 resources/static 文件夹