コンテンツにスキップ

openssl ca

証明書 の発行履歴と 失効状態 を管理しながら、 CA として CSR へ署名するコマンド。

openssl x509 による簡易署名とは異なり、発行した証明書をデータベースへ記録し、シリアル番号、失効、 CRL を管理する。


  • 証明書の発行履歴を残す
  • 証明書を失効させる
  • CRLを生成する
  • Subjectのポリシーを設定して証明書を発行する

単発の検証や学習目的でCSRへ署名するだけなら、 openssl x509 の方が構成が簡単である。


openssl ca はコマンドだけでは動作せず、CA用の設定と状態ファイルが必要になる。

署名には、CA証明書と対応する CA秘密鍵 を使用する。

設定ファイルの基本構文は、 OpenSSL設定ファイル を参照。

項目 役割
CA証明書 発行する証明書のIssuerになる
CA秘密鍵 証明書へ署名する
設定ファイル CAのファイル配置、ポリシー、拡張を定義する
index.txt 発行済み証明書と失効状態を記録するデータベース
serial 次に使用するシリアル番号
newcerts/ 発行した証明書を保存するディレクトリ

index.txt は 0 バイトの空ファイルを用意する。空行や空白が入っていると読み込みに失敗する。 serial には次に使用するシリアル番号を16進数で記述する。

Terminal window
mkdir -p demoCA/newcerts
touch demoCA/index.txt
echo 1000 > demoCA/serial

Terminal window
openssl ca \
-config ca.cnf \
-in server.csr \
-out server.crt \
-notext \
-extfile extensions.cnf \
-extensions server_cert

通常は、CSRと発行する証明書の内容が表示され、署名するか確認を求められる。発行するとデータベースとシリアル番号が更新される。


設定ファイルには、少なくとも次のような情報が必要になる。

[ ca ]
default_ca=CA_default
[ CA_default ]
dir=./demoCA
database=$dir/index.txt
new_certs_dir=$dir/newcerts
certificate=$dir/ca.crt
private_key=$dir/ca.key
serial=$dir/serial
default_days=365
default_crl_days=30
default_md=sha256
policy=policy_any
[ policy_any ]
countryName=optional
stateOrProvinceName=optional
localityName=optional
organizationName=optional
organizationalUnitName=optional
commonName=supplied
emailAddress=optional

default_crl_days は生成するCRLの次回更新までの日数である。 -crldays をコマンドラインで指定する場合は省略できる。実際には、発行する証明書へ適用するX.509拡張なども追加する。


CAの設定ファイルを指定する。

Terminal window
-config ca.cnf

CA証明書、秘密鍵、データベース、シリアル番号、ポリシーなどの場所を設定ファイルから読み込む。

署名するCSRを指定する。

Terminal window
-in server.csr

発行した証明書の出力先を指定する。

Terminal window
-out server.crt

出力ファイルへ証明書の詳細なテキストを追加せず、証明書本体だけを出力する。

Terminal window
-notext

指定しない場合、 -out のファイルには証明書のテキスト表示と PEM形式 の証明書が両方出力される。

証明書へ追加する X.509拡張 を記述した別の設定ファイルを指定する。

Terminal window
-extfile extensions.cnf

発行する証明書へ適用するX.509拡張セクションを指定する。

Terminal window
-extensions server_cert

-extfile を使用した場合は、そのファイル内のセクションを指定する。

署名前の確認を省略し、自動的に証明書を発行する。

Terminal window
-batch

内容の確認なしで発行されるため、自動処理以外では慎重に使用する。


証明書を失効させる例:

Terminal window
openssl ca \
-config ca.cnf \
-revoke server.crt

-revoke で指定する証明書は、このCAが発行してデータベースへ記録されている必要がある。

CRLを生成する例:

Terminal window
openssl ca \
-config ca.cnf \
-gencrl \
-out ca.crl

失効情報は index.txt に記録される。CRLを生成するには、設定ファイルの default_crl_days またはコマンドラインの -crldays が必要になる。


openssl ca openssl x509
発行履歴をデータベースで管理する 発行履歴を管理しない
シリアル番号を継続管理する ランダム値または簡易的なシリアルファイルを使う
失効とCRLを扱える 失効とCRLを扱わない
設定と状態ファイルが必要 少ないファイルで署名できる

  • index.txt はCA運用の重要な状態ファイルであり、破損すると復旧が難しい。
  • 同じデータベースに対する同時実行を防ぐロック機構はない。
  • CSR内の拡張を無条件にコピーすると、意図しないCA証明書を発行する危険がある。
  • CA秘密鍵は厳重に保護する。


  • openssl-ca CA設定、CSRへの署名、証明書データベース、失効、CRL。

  • x509v3_config 発行する証明書へ適用するX.509拡張の形式。