Nginx 允许我们使用多个证书,以便我们可以同时使用 ECC 和 RSA 证书
ssl_certificate /etc/ssl/example.com.combined.crt;
ssl_certificate_key /etc/ssl/example.com.key;
ssl_certificate /etc/ssl/example.com-ecc.combined.crt;
ssl_certificate_key /etc/ssl/example.com-ecc.key;
但是,它只允许我们指定一个用于 OCSP 装订的受信任证书:
ssl_trusted_certificate /etc/ssl/ocsp-bundle-rsa-ecc.crt;
显然,我们需要为它提供中间证书链和根证书链,但我找不到任何文档表明它是否受支持,或者这些证书应该按照什么顺序排列,即是否应该是:
- 中间1
- 根1
- 中间体2
- 根2
或者
- 中间1
- 中间体2
- 根1
- 根2
或者,如果他们需要共享一个根(一些 ECC 证书是使用 RSA 根签名的):
- 中间1
- 中间体2
- 根
或者简单地说,在 nginx 中是否无法使用双格式证书进行 OCSP。
这个证书包应该如何构建?
答案1
我做了一个快速的研究,这似乎是对“你不构建它”这个问题最简单的回答,它就能起作用:)
OSCP 装订可能工作正常没有 ssl_trusted certificate
只要..
- 您的操作系统信任的根 CA 存储是最新的(
ca-certificates
以 RedHat 为例) - 你有
ssl_stapling on;
并且ssl_stapling_verify on;
- 您的每个证书(基于 ECC 和 RSA)都包含除根 CA 之外的完整链
nginx 文档明确指出只有......
如果 ssl_certificate 文件不包含中间证书,则服务器证书颁发者的证书应存在于 ssl_trusted_certificate 文件中
您实际上可以在 SSL 实验室测试中检查您的内容以确认这一点 - OSCP 装订在没有的情况下确实可以正常工作ssl_trusted_certificate
。
因此,如果您只是确保将证书本身及其中间证书放在定义的文件中ssl_certificate
并在系统中拥有最新的根 CA 的最佳实践,那么双重证书就可以具有有效的 OSCP。