証明書失効のシミュレーション
このステップでは、証明書を失効させる方法を学びます。失効は、証明書の秘密鍵が侵害された場合や、証明書が自然な有効期限前に不要になった場合に不可欠なプロセスです。これは証明書失効リスト(CRL)を使用して管理されます。
CRL は、CA によって発行され、失効させたすべての証明書のシリアル番号を含む、デジタル署名されたリストです。クライアントは CRL をダウンロードして、受け取った証明書がまだ有効であるかを確認できます。
失効を管理するために、openssl は CA のデータベースファイル(index.txt および serial)をどこで見つけるかを知るために、小さな設定ファイルが必要です。この実験(Lab)のセットアップスクリプトは、必要なディレクトリ(my-ca)とファイルはすでに作成しています。次に、設定ファイルを作成します。
cat コマンドを使用して my-ca.conf を作成します。
cat << EOF > my-ca.conf
[ ca ]
default_ca = CA_default
[ CA_default ]
dir = ./my-ca
database = \$dir/index.txt
serial = \$dir/serial
private_key = ca.key
certificate = ca.pem
default_md = sha256
policy = policy_anything
crl_extensions = crl_ext
default_crl_days = 30
[ policy_anything ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[ crl_ext ]
authorityKeyIdentifier=keyid:always
EOF
この設定ファイルは、OpenSSL が認証局(CA)として動作する方法を指示します。各セクションの機能は次のとおりです。
default_ca = CA_default: メインの CA 設定セクションを指します。
dir = ./my-ca: データベースファイル用の CA 作業ディレクトリ
database = $dir/index.txt: 証明書データベース(発行済み/失効済み証明書を追跡)
serial = $dir/serial: 一意の証明書 ID 用のシリアル番号ファイル
private_key = ca.key: 証明書署名に使用する CA の秘密鍵
certificate = ca.pem: CA 自身の証明書ファイル
default_md = sha256: 署名用のハッシュアルゴリズム(SHA-256)
policy = policy_anything: 証明書の検証ルール
crl_extensions = crl_ext: CRL の書式設定オプション
default_crl_days = 30: CRL の有効期間(30 日間)
countryName = optional: 国コード
stateOrProvinceName = optional: 都道府県
localityName = optional: 市区町村/場所
organizationName = optional: 組織名
organizationalUnitName = optional: 部門
commonName = supplied: ドメイン/サーバー名(必須)
emailAddress = optional: E メールアドレス
authorityKeyIdentifier=keyid:always: CRL に CA 識別子を含めて検証を容易にします
この設定ファイルは、CA の「運用マニュアル」です。OpenSSL に鍵の場所、証明書の保存方法、および証明書の発行と失効に従うべきルールを伝えます。
次に、サーバー証明書(server.crt)を失効させます。このコマンドは証明書のシリアル番号を検索し、index.txt データベースファイル内で失効済みとしてマークします。
openssl ca -config my-ca.conf -revoke server.crt
失効を確認する出力が表示されます。
失効後、更新された CRL を生成して公開する必要があります。
openssl ca -config my-ca.conf -gencrl -out my-ca.crl
これにより、失効した証明書のリストを含むファイル my-ca.crl が作成されます。
最後に、サーバー証明書を再度検証してみますが、今回は CRL も提供します。適切な検証プロセスでは、失効を確認する必要があります。
openssl verify -CAfile ca.pem -CRLfile my-ca.crl -crl_check server.crt
コマンドは、明確なメッセージとともに失敗します。
C = US, ST = California, L = MountainView, O = MyWebServer, CN = example.com
error 23 at 0 depth lookup: certificate revoked
error server.crt: verification failed
「certificate revoked」(証明書は失効しました)というエラーは、私たちの失効プロセスが成功したことを確認します。クライアントは、CRL をチェックする際に、example.com の証明書がもはや信頼できないことを正しく識別しました。