如何用nginx客户端authentication检查多个CRL列表?

我有一个自定义的easyrsa安装程序,它有一个根和三个由root签名的CA。 (根据用户types,三个不同的子卡),如下所示:

RootCA +----- AdminUserCA +----- EmployeeCA +----- ClientCA 

我有身份validation使用以下configuration:

 server { listen 127.0.0.1:443; server_name www.acme.corp; ssl on; ssl_certificate /data/src/easy-rsa/bundles/www.acme.corp_bundle.crt; ssl_certificate_key /data/src/easy-rsa/whfWebCA/pki/private/www.acme.corp.key; add_header Strict-Transport-Security "max-age=315360000; includeSubdomains"; ssl_protocols SSLv3 TLSv1; ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-RC4-SHA:ECDHE-RSA-RC4-SHA:ECDH-ECDSA-RC4-SHA:ECDH-RSA-RC4-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:RC4-SHA; ssl_prefer_server_ciphers on; ssl_verify_client optional; ssl_client_certificate /data/src/easy-rsa/bundles/client_auth_ca_chain.crt; ssl_verify_depth 2; ssl_crl /data/src/easy-rsa/bundles/crls/all.pem; ... } 

问题在于CRL检查。 CRL由签发CA签字,因此不能像中间证书+根证书一样join。

因此,用户的证书将由给定的中间CA根据他们的用户types来发布。 问题是我真的需要检查四个CRL列表才能生效。 nginx ssl_crl只支持一个文件。

所以我的问题是:是否有可能让nginx正确检查客户端证书在这个安装程序,而不必在我的应用程序进行检查?

对的,这是可能的。 只需将多个PEM编码的CRL连接到ssl_crl指令中指定的单个文件ssl_crl

(nginx邮件列表中的一个问题引用了这个问题, 在这里也提供了答案 。)

您必须连接链中的所有CRL:根CA和中间CA.

使用openssl crl -in crl_list.crl -noout -text只读取第一个crl,但是nginx正确读取它们并validation用户证书。

启发: https : //www.ruby-forum.com/topic/6874370