Elastic Load Balancing (ELB) の相互 TLS (mTLS) で、証明書失効リスト (CRL) を設定したいです。
簡単な説明
Application Load Balancer で mTLS を使用すると、サードパーティの認証機関 (CA) からの証明書でクライアントを認証できます。AWS Private CA を使用して、証明書でクライアントを認証することもできます。証明書へのアクセスを取り消すには、ロードバランシングトラストストアに証明書失効リスト (CRL) を作成します。
解決策
注: サードパーティの認証機関については、次の解決策に関する「PEM エンコードの CRL を Amazon S3 バケットにアップロードする」セクションまでスキップしてください。
AWS Private CA で発行されたクライアント証明書を取り消すには、次の手順を実行します。
クライアント証明書を発行した CA で CRL 配布オプションを有効にする
クライアント証明書を発行した CA で CRL 配布オプションを有効にするには、次の手順を実行します。
- AWS Private CA コンソールを開きます。
- クライアント証明書を発行した認証機関を選択します。
- 失効設定を変更し、CRL 配布オプションを有効にします。
- 必要なアクセスポリシーをアタッチするには、新しい Amazon Simple Storage Service (Amazon S3) バケットを作成するか、既存の Amazon S3 バケットを使用します。
- acm-pca-permission-test ファイルが Amazon S3 バケットに作成されたことを確認するには、テキストファイルを作成します。「これはバケットのアクセス許可を確認するためのテストファイルです」というテキストファイルを作成します。
証明書を取り消す
**注:**AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
クライアント証明書からアクセス許可を取り消すには、以下の手順を実行します。
-
クライアント証明書のシリアル番号を特定し、記録しておきます。このシリアル番号は、次の手順で使用します。
openssl x509 -in client_certertificate.cert -text -noout | grep -A 1 "Serial Number"
-
(オプション) Application Load Balancer の接続ログのフィールド leaf_client_cert_serial_number で、クライアント証明書のシリアル番号を確認します。
-
証明書へのアクセスを取り消すには、acm-pca コマンドを使用します。
注: example-arn-ca-issuer は認証機関の ARN に、example-cert-sn は証明書のシリアル番号に、example-reason は失効理由に置き換えてください。
aws acm-pca revoke-certificate \
--certificate-authority-arn <example-arn-ca-issuer> \
--certificate-serial <example-cert-sn> \
--revocation-reason "example-reason"
-
アクセスを取り消すすべてのクライアント証明書に対し、前述のステップ 2 と 3 を繰り返します。
注: 証明書が失効した後、AWS Private CA が Amazon S3 バケットの CRL を更新するまでに最大 30 分かかります。
生成された CRL を変換する
**注:**AWS CLI のコマンドの実行時にエラーが発生する場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
生成された CRL を変換するには、次の手順を実行します。
-
Amazon S3 コンソールを開きます。
-
以前に使用した Amazon S3 バケットから CRL ファイルをダウンロードします。または、AWS CLI を使用して Amazon S3 バケットを一覧表示し、作業ディレクトリにダウンロードします。
注: example-bucket をお使いの Amazon S3 バケットに、example-crl-file を CRL ファイルに置き換えます。
aws s3 ls s3://<example-bucket>/crl/
aws s3 cp s3://<example-bucket>/crl/<example-crl-file>.crl ./revoke_list.crl
-
ダウンロードした CRL ファイルのエンコードを DER から PEM に変換します。
openssl crl -in example-revoke-list.crl -inform DER -out revoke_list_in_pem.crl
PEM エンコードの CRL を Amazon S3 バケットにアップロードします
**注:**AWS CLI のコマンドの実行時にエラーが発生する場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
PEM エンコードの CRL を Amazon S3 バケットにアップロードするには、次の手順を実行します。
- Amazon S3 コンソールを開きます。
- CRL ファイルを Amazon S3 バケットにアップロードします。または、AWS CLI を使用して CRL ファイルを作業ディレクトリにアップロードします。
注: example-bucket は、お使いの Amazon S3 バケットに置き換えてください。
aws s3 cp revoked_list_in_pem.crl s3://<example-bucket>/crl/revoked_list_in_pem.crl
CRL を使用してロードバランシングトラストストアの失効リストを更新する
**注:**AWS CLI のコマンドの実行時にエラーが発生する場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
CRL を使用して負荷分散トラストストアを更新するには、次の手順を実行します。
-
Amazon Elastic Compute Cloud (Amazon EC2) コンソールを開きます。
-
[トラストストア] に移動し、更新するトラストストアを選択します。
-
取り消しリストを追加するには、追加する CRL ファイルの Amazon S3 バケット URL を指定します。または、elbv2 コマンドを使用してトラストストアの取り消しを更新します。
注: example-trust-store-arn をトラストストアの ARN に、example-bucket を Amazon S3 バケットに置き換えます。
aws elbv2 add-trust-store-revocations \
--trust-store-arn <example-trust-store-arn> \
--revocation-contents S3Bucket=<example-bucket>,S3Key=/crl/revoked_list_in_pem.crl,RevocationType=CRL
-
CRL が適用されたことを確認するには、出力を確認して、取り消されたエントリの数が増加していることを確認します。
証明書失効リストがトラストストアに追加されると、失効 ID が割り当てられます。失効IDは、トラストストアに失効リストが追加されるたびに増加し、変更することはできません。証明書失効リストを削除すると、失効 ID も削除され、トラストストアの存続期間中に再利用されることはありません。
関連情報
CA の失効設定の更新 (コンソール)
revoke-certificate
プライベート証明書の取り消し
add-trust-store-revocations