web-dev-qa-db-ja.com

nginxクライアント認証で複数のCRLリストを確認するにはどうすればよいですか?

ルートと、ルートによって署名された3つのCAを使用したカスタムeasyrsaセットアップがあります。 (ユーザータイプに応じて3つの異なるサブcas)、次のように:

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によって発行されます。問題は、4つのCRLリストを効果的にチェックする必要があることです。 nginx ssl_crlは単一のファイルのみをサポートします。

だから私の質問は:アプリケーションでチェックを行わなくても、この設定でnginxにクライアント証明書の取り消しを正しくチェックさせることは可能ですか?

6
ErebusBat

はい、可能です。複数のPEMエンコードされたCRLをssl_crlディレクティブで指定された単一のファイルに連結するだけです。

(nginxメーリングリストの質問がこの質問を参照しています。投稿 答え ここも同様です。)

2
Maxim Dounin

すべてのCRLをチェーンで連結する必要があります:ルートCAと中間CA。

openssl crl -in crl_list.crl -noout -textを使用すると、最初のcrlのみが読み取られますが、nginxはそれらを正しく読み取り、ユーザー証明書を検証します。

刺激: https://www.Ruby-forum.com/topic/687437

0
Nicolas Malbran