![具有间接 CRL 的 NGINX 客户端证书](https://linux22.com/image/763807/%E5%85%B7%E6%9C%89%E9%97%B4%E6%8E%A5%20CRL%20%E7%9A%84%20NGINX%20%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%AF%81%E4%B9%A6.png)
我正在尝试使用 Nginx SSL 模块实现 mTLS。一切正常,直到我给出以 PEM 格式连接的 Nginx CRL 文件,因为其中一个 CRL 是间接 CRL。
叶证书链如下所示:
Root -> CA1 -> CA2 -> CA3 -> Leaf
但在我的用例中,CA2 和 CA3 将无法颁发 CRL,因此 CA1 签署 CRL 颁发者。此 CRL 颁发者将为已撤销的 CA3 证书和 Leaf 证书颁发 CRL。CA3 和 Leaf 证书在 CDP 中包含 CRL 颁发者 DN,并且 CRL 文件格式正确,CRL 扩展“分发点”带有 indirectCRL=true,列表中的每个已撤销证书在正确的 CRL 条目扩展中包含其颁发者 DN。
我可以使用 OpenSSL 但使用“不受信任”选项来验证证书的撤销。
$ openssl verify -crl_check -extended_crl -CAfile chain.pem -CRLfile concatcrl.pem -untrusted crlissuer.pem leafcert.pem
但我无法使用 Nginx 进行同样的验证:
client SSL certificate verify error: (3:unable to get certificate CRL) while reading client request headers
我的 Nginx 配置是:
ssl_trusted_certificate /etc/nginx/clients-cert/crlissuer.pem;
ssl_client_certificate /etc/nginx/clients-cert/root+ca1.pem;
ssl_verify_client on;
ssl_verify_depth 10;
ssl_crl /var/crl/chain-crl.pem;
(客户端将发送其叶证书+CA3+CA2)。
如果我注释指令“ssl_crl”,我的客户端就可以连接到服务器。我还通过将 crliissuer.pem 添加到链中,尝试了 ssl_trusted_certificate 和 ssl_client_certificate 的不同组合,两个指令中的链都带有 CRL 颁发者。
我找不到其他方法可以解决这个问题。请帮忙。