使用 CloudFlare 源服务器证书时提示 issuer certificate not found 问题
前几天将博客迁移到了甲骨文的 vps 上,顺便将 nginx 版本升级到了 1.25.4 ,OpenSSL 版本升级到了 3.0.2 , 迁移完后运行 nginx -t 出现如下提示。
root@blog:~# nginx -t nginx: [warn] "ssl_stapling" ignored, issuer certificate not found for certificate "/etc/nginx/ssl/hicairo.com.pem" nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
出现一行警告信息,虽然忽略该提示也可以正常工作,不影响使用,但是作为技术控的你,总感觉心里不舒服,要把这个事情搞明白。于是就看到了这篇文章。^_^
一、相关原理:OCSP 与 CRL
出于某些原因,证书颁发者有时候需要作废某些证书。那么证书使用者(例如浏览器)如何知道一个证书是否已被作废呢?通常有两种方式:CRL(Certificate Revocation List,证书撤销名单)和 OCSP(Online Certificate Status Protocol,在线证书状态协议)。
CRL 是由证书颁发机构定期更新的一个列表,包含了所有已被作废的证书,浏览器可以定期下载这个列表用于验证证书合法性。不难想象,CRL 会随着时间推移变得越来越大,而且实时性很难得到保证。
OCSP 则是一个在线查询接口,浏览器可以实时查询单个证书的合法性。在每个证书的详细信息中,都可以找到对应颁发机构的 CRL 和 OCSP 地址。
OCSP 的问题在于,某些客户端会在 TLS 握手阶段进一步协商时,实时查询 OCSP 接口,并在获得结果前阻塞后续流程,这对性能影响很大。而 OCSP Stapling(OCSP 封套),是指服务端在证书链中包含颁发机构对证书的 OCSP 查询结果,从而让浏览器跳过自己去验证的过程。服务端有更快的网络,获取 OCSP 响应更容易,也可以将 OCSP 响应缓存起来。OCSP 响应本身经过了数字签名,无法伪造,所以 OCSP Stapling 技术既提高了握手效率,也不会影响安全性。
二、启用 OCSP
如下所示,为了解决上述问题,我们会在 Nginx 配置中 SSL 段内加入 ssl_stapling 和 ssl_stapling_verify 指令。
server { ...... ssl_stapling on; ssl_stapling_verify on; ...... }
正常情况下,当我们运行 nginx -t 会出现如下提示。
root@blog:~# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
但是却出现了本文开始提到的警告信息。
三、原因分析
CloudFlare 为用户提供的源服务器证书是由 Cloudflare 签名的免费 TLS 证书,该域名证书属于泛域名证书,最长支持 15 年,主要用于源服务器和 Cloudflare 之间的流量加密。但是这个证书属于自签名证书,证书链不完整,缺少根证书。因此也就出现了本文开始提到的警告信息。
四、解决方法
1、使用如下网址下载 CloudFlare 的根证书/证书链文件,并上传到您的源 Web 服务器。请注意, CloudFlare 提供了 ECC 和 RSA 版本两个文件,具体下载哪一个参考上图,根据自己申请源服务器证书时选择的“私钥类型”来决定。
2、参考如下配置,修改 nginx 中 SSL 的相关配置,增加 ssl_trusted_certificate 一行,指向上一步你上传到服务器上的根证书/证书链文件。
server { ...... ssl_stapling on; ssl_stapling_verify on; ssl_session_tickets off; ssl_trusted_certificate /etc/nginx/ssl/origin_ca_rsa_root.pem; ssl_certificate /etc/nginx/ssl/hicairo.com.pem; ssl_certificate_key /etc/nginx/ssl/hicairo.com.key; ...... }
本文出处:HiFeng'Blog
本文链接:https://hicairo.com/post/73.html
版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA许可协议。转载请注明出处!
下一篇 >>