解决 Nginx 开启 ssl_stapling 提示 issuer certificate not found 问题

小助手读文章 00:00 / 00:00

最近在配置 SSL 时出现了 nginx: [warn] "ssl_stapling" ignored, issuer certificate not found for certificate "default.csr" 错误,解决方法比较简单,但却让人意想不到。

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    on;
ssl_stalping_verify    on;

问题分析

如果没有问题,那么测试配置应该响应如下:

[[email protected] default]# nginx -t
nginx: the configuration file /xxx/conf/nginx.conf syntax is ok
nginx: configuration file /xxx/conf/nginx.conf test is successful

如果出现如下响应,说明我们的配置是有问题的:

[[email protected] default]# nginx -t
nginx: [warn] "ssl_stapling" ignored, issuer certificate not found for certificate "/xxx/key/default/default.csr"
nginx: the configuration file /xxx/conf/nginx.conf syntax is ok
nginx: configuration file /xxx/conf/nginx.conf test is successful

解决方法

1、原因:使用的证书是自签证书 或证书链不完整。

解决方法:配置中新增 ssl_trusted_certificate 配置,即:

ssl_trusted_certificate /path/to/ROOT_CA_CERT;

根据 OCSP 工作原理,如果配置的证书没有包含证书链(即签发 CA,从上到下依次为用户证书->中间 CA->根 CA),那么都应该加上这一行配置。

2、原因:证书 Cert 与私钥 Key不匹配。

解决方法:博主这次无法开启 ssl_stapling 的原因就是证书错误,并且通过 nginx -t 无法检测出该错误(ECC 证书+RSA 私钥,可能遇到 Bug 了),因此在配置 OCSP 时务必再次确认证书。

参考文章:

1、《TLS 握手优化详解
2、《Improving SSL Configuration
3、《从无法开启 OCSP Stapling 说起


ArmxMod for Typecho
个性化、自适应、功能强大的响应式主题

推广

 继续浏览关于 nginxSSL证书经验apache方法https 的文章

 本文最后更新于 2019/05/15 21:58:27,可能因经年累月而与现状有所差异

 引用转载请注明:VirCloud's Blog > 建站 > 解决 Nginx 开启 ssl_stapling 提示 issuer certificate not found 问题