如何使用 nginx 客户端身份验证检查多个 CRL 列表?

如何使用 nginx 客户端身份验证检查多个 CRL 列表?

我有一个自定义的 easyrsa 设置,其中包含一个根证书和三个由该根证书签名的 CA。(根据用户类型有三个不同的子 CA),如下所示:

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

我已经使用以下配置进行身份验证:

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 签名,因此它们不能像中间证书+根证书那样附加在一起。

因此,用户的证书将由给定的中间 CA 根据其用户类型颁发。问题是我确实需要检查四个 CRL 列表才能生效。nginxssl_crl仅支持单个文件。

所以我的问题是:是否可以让 nginx 在此设置中正确检查客户端证书撤销,而无需在我的应用程序中进行检查?

答案1

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

(nginx 邮件列表中的一个问题引用了这个问题。发布答案这里也一样。

答案2

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

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

灵感来自:https://www.ruby-forum.com/topic/6874370

相关内容