openssl ca
openssl x509 による簡易署名とは異なり、発行した証明書をデータベースへ記録し、シリアル番号、失効、 CRL を管理する。
- 証明書の発行履歴を残す
- 証明書を失効させる
- CRLを生成する
- Subjectのポリシーを設定して証明書を発行する
単発の検証や学習目的でCSRへ署名するだけなら、 openssl x509 の方が構成が簡単である。
事前に必要なもの
Section titled “事前に必要なもの”openssl ca はコマンドだけでは動作せず、CA用の設定と状態ファイルが必要になる。
署名には、CA証明書と対応する CA秘密鍵 を使用する。
設定ファイルの基本構文は、 OpenSSL設定ファイル を参照。
| 項目 | 役割 |
|---|---|
| CA証明書 | 発行する証明書のIssuerになる |
| CA秘密鍵 | 証明書へ署名する |
| 設定ファイル | CAのファイル配置、ポリシー、拡張を定義する |
index.txt |
発行済み証明書と失効状態を記録するデータベース |
serial |
次に使用するシリアル番号 |
newcerts/ |
発行した証明書を保存するディレクトリ |
index.txt は 0 バイトの空ファイルを用意する。空行や空白が入っていると読み込みに失敗する。 serial には次に使用するシリアル番号を16進数で記述する。
mkdir -p demoCA/newcertstouch demoCA/index.txtecho 1000 > demoCA/serialCSRへ署名する
Section titled “CSRへ署名する”openssl ca \ -config ca.cnf \ -in server.csr \ -out server.crt \ -notext \ -extfile extensions.cnf \ -extensions server_cert通常は、CSRと発行する証明書の内容が表示され、署名するか確認を求められる。発行するとデータベースとシリアル番号が更新される。
最小構成の考え方
Section titled “最小構成の考え方”設定ファイルには、少なくとも次のような情報が必要になる。
[ ca ]default_ca=CA_default
[ CA_default ]dir=./demoCAdatabase=$dir/index.txtnew_certs_dir=$dir/newcertscertificate=$dir/ca.crtprivate_key=$dir/ca.keyserial=$dir/serialdefault_days=365default_crl_days=30default_md=sha256policy=policy_any
[ policy_any ]countryName=optionalstateOrProvinceName=optionallocalityName=optionalorganizationName=optionalorganizationalUnitName=optionalcommonName=suppliedemailAddress=optionaldefault_crl_days は生成するCRLの次回更新までの日数である。 -crldays をコマンドラインで指定する場合は省略できる。実際には、発行する証明書へ適用するX.509拡張なども追加する。
よく使うオプション
Section titled “よく使うオプション”-config
Section titled “-config”CAの設定ファイルを指定する。
-config ca.cnfCA証明書、秘密鍵、データベース、シリアル番号、ポリシーなどの場所を設定ファイルから読み込む。
署名するCSRを指定する。
-in server.csr発行した証明書の出力先を指定する。
-out server.crt-notext
Section titled “-notext”出力ファイルへ証明書の詳細なテキストを追加せず、証明書本体だけを出力する。
-notext指定しない場合、 -out のファイルには証明書のテキスト表示と PEM形式 の証明書が両方出力される。
-extfile
Section titled “-extfile”証明書へ追加する X.509拡張 を記述した別の設定ファイルを指定する。
-extfile extensions.cnf-extensions
Section titled “-extensions”発行する証明書へ適用するX.509拡張セクションを指定する。
-extensions server_cert-extfile を使用した場合は、そのファイル内のセクションを指定する。
-batch
Section titled “-batch”署名前の確認を省略し、自動的に証明書を発行する。
-batch内容の確認なしで発行されるため、自動処理以外では慎重に使用する。
失効とCRL
Section titled “失効とCRL”証明書を失効させる例:
openssl ca \ -config ca.cnf \ -revoke server.crt-revoke で指定する証明書は、このCAが発行してデータベースへ記録されている必要がある。
CRLを生成する例:
openssl ca \ -config ca.cnf \ -gencrl \ -out ca.crl失効情報は index.txt に記録される。CRLを生成するには、設定ファイルの default_crl_days またはコマンドラインの -crldays が必要になる。
openssl x509 との違い
Section titled “openssl x509 との違い”openssl ca |
openssl x509 |
|---|---|
| 発行履歴をデータベースで管理する | 発行履歴を管理しない |
| シリアル番号を継続管理する | ランダム値または簡易的なシリアルファイルを使う |
| 失効とCRLを扱える | 失効とCRLを扱わない |
| 設定と状態ファイルが必要 | 少ないファイルで署名できる |
index.txtはCA運用の重要な状態ファイルであり、破損すると復旧が難しい。- 同じデータベースに対する同時実行を防ぐロック機構はない。
- CSR内の拡張を無条件にコピーすると、意図しないCA証明書を発行する危険がある。
- CA秘密鍵は厳重に保護する。
OpenSSL公式ドキュメント
Section titled “OpenSSL公式ドキュメント”-
openssl-ca CA設定、CSRへの署名、証明書データベース、失効、CRL。
-
x509v3_config 発行する証明書へ適用するX.509拡張の形式。