ルートと、ルートによって署名された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にクライアント証明書の取り消しを正しくチェックさせることは可能ですか?
はい、可能です。複数のPEMエンコードされたCRLをssl_crl
ディレクティブで指定された単一のファイルに連結するだけです。
(nginxメーリングリストの質問がこの質問を参照しています。投稿 答え ここも同様です。)
すべてのCRLをチェーンで連結する必要があります:ルートCAと中間CA。
openssl crl -in crl_list.crl -noout -text
を使用すると、最初のcrlのみが読み取られますが、nginxはそれらを正しく読み取り、ユーザー証明書を検証します。