用例
这是我的用例:我有一个通过 cloudflare(代理)可用的页面,我们称之为 example.com。我使用 Cloudflare 创建了一个原始证书并将其链接到我的 nginx 配置中,工作正常。Cloudflare 在“完整”SSL 模式下工作。现在我希望能够基本上添加127.0.0.1 example.com
到我/etc/hosts
的服务器本身可以直接访问该页面(使用不同的域和在该服务器上运行的软件来规避这一点并不是一个真正的选择)。
现在很明显,当curl -v https://example.com
我收到 ssl 错误时。
到目前为止我做了什么
所以基本上,做了一些研究,了解了CA链等等。我找到了 Cloudflare Origin 根 CA(Cloudflare 文档,第 4 步)并将其包含在我的 nginx 服务器的证书链中(基本上首先是他们为我生成的 Cloudflare Origin 证书,然后是根 CA)。我还将根 CA 安装到/usr/share/ca-certificates
(和/usr/local/share/ca-certificates
)并运行dpkg-reconfigure ca-certificates
,它被正确添加到/etc/ssl/certs
目录中。到目前为止,一切都很好?
结果:不起作用。
进一步的研究
偶然发现本指南,我查看了以下内容:
cert.pem
是我的 Cloudflare 颁发的证书ca.pem
是 cloudflare 根 CA(ecc 文件)
root@host:~/ssltest# openssl verify cert.pem
O = "CloudFlare, Inc.", OU = CloudFlare Origin CA, CN = CloudFlare Origin Certificate
error 20 at 0 depth lookup: unable to get local issuer certificate
error cert.pem: verification failed
root@host:~/ssltest# openssl x509 -noout -issuer -in cert.pem
issuer=C = US, O = "CloudFlare, Inc.", OU = CloudFlare Origin SSL Certificate Authority, L = San Francisco, ST = California
root@host:~/ssltest# openssl x509 -noout -issuer -in ca.pem
issuer=C = US, ST = California, L = San Francisco, O = "CloudFlare, Inc.", OU = CloudFlare Origin SSL ECC Certificate Authority
root@host:~/ssltest# openssl verify -CAfile ca.pem cert.pem
O = "CloudFlare, Inc.", OU = CloudFlare Origin CA, CN = CloudFlare Origin Certificate
error 20 at 0 depth lookup: unable to get local issuer certificate
error cert.pem: verification failed
所以基本上 Issuer ofcert.pem
和 Subject ofca.pem
不匹配。这对我来说意味着:要么有一个我不知道如何获得的中间证书,要么 Cloudflare 给了我一个不是来自他们给我的根 CA 的证书。
Issuer 和 Subject 之间的差异也非常小:
CloudFlare Origin SSL Certificate Authority
CloudFlare Origin SSL ECC Certificate Authority
我能做些什么来修复它?我可能只是在这里看不到东西,有人可以帮我吗?谢谢!