OpenSSLで雑にCAを構築する
CA.shやopenssl.cnfに触らずにCA証明書を作って署名する方法のメモ。 なお、きちんとした運用が必要な場面では参考にすべきでない。
話を単純にするため、以下で用いる公開鍵アルゴリズムはすべてRSA 2048 bitとする。
CA証明書の作成
自己署名証明書を作ると自動的にBasic ConstraintsにCA:TRUE
が付くため、そのままCA証明書(より正確にはルート証明書)となる。
$ openssl genrsa -out ca.key 2048 $ openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -subj "/CN=my private CA"
ここでは、ca.keyがCAの秘密鍵、ca.crtがCA証明書となる。
また、-days
オプションを使って有効期限を約10年後に指定している。
指定しない場合はデフォルトのopenssl.cnfのdefault_days
に書かれている日数が使われる。
さらに、-subj
オプションを使うことで対話的な入力を行うことなくSubjectを指定することができる。
鍵にパスフレーズをかけることを強制されてもよいなら、次のようにして鍵とCA証明書を一度に生成することもできる。
$ openssl req -new -x509 -days 3650 -newkey rsa:2048 -keyout ca.key -out ca.crt -subj "/CN=my private CA"
CA署名付き証明書の作成
秘密鍵、CSR(証明書署名要求)、署名付き証明書の順で作成する。
$ openssl genrsa -out cert.key 2048 $ openssl req -new -key cert.key -out cert.csr -subj "/CN=www.example.com" $ openssl x509 -req -days 3650 -CA ca.crt -CAkey ca.key -CAcreateserial -in cert.csr -out cert.crt
cert.keyが秘密鍵、cert.csrがCSR、cert.crtが署名付き証明書である。 cert.crtを作成した後は、cert.csrは削除してよい。
ここでも、-days
オプションを使って署名付き証明書の有効期限を約10年後に指定している。
また、-CAcreateserial
オプションによりシリアル番号を自動的に生成する。
この際、発行済みシリアル番号を保持するファイルca.srlが作成される。
-CAcreateserial
オプションの代わりに-set_serial
オプションを使えば、任意のシリアル番号を指定することができる。
この場合、ca.srlは作成されない。
$ openssl x509 -req -days 3650 -CA ca.crt -CAkey ca.key -set_serial 1 -in cert.csr -out cert.crt
シリアル番号は個々のCAにおいて、署名済み証明書ごとに異なる番号でなければならないことに注意。
証明書の内容を確認する
CA証明書、CA署名付き証明書どちらについても、同じように内容を確認できる。
$ openssl x509 -in ca.crt -noout -text $ openssl x509 -in cert.crt -noout -text