OpenSSLでクライアント証明書を作成する。

どこもかしこもコロナでやられてしまってる。
本日参加予定だった勉強会もやられてしまった。
しかしボヤいていても状況は好転しないので、状況が変わった時に向けて準備は進めよう。

今日は前回の投稿の続きでクライアント証明書を発行していきます。

証明書発行リクエスト(CSR: Certificate Signing Request)作成

証明書発行の前にCSRというものを作成していきます。
CSRは名前の通り、「こういう証明書を発行してください」と認証局に依頼するための申込書のようなものです。
尚、CSRCSRを使って発行された証明書で暗号化通信を行うために、作成時に秘密鍵との紐付けを行う必要があります。
そのため、先に秘密鍵を作成します。

openssl genrsa -out /etc/pki/CA/private/client1_key.pem 2048

次にCSRを発行していきます。引数「-in」で秘密鍵との紐付けを行っており、引数「-subj="(サブジェクト)"」で設定したいサブジェクト(パラメータ)を渡すことでワンラインのコマンドにしています。
サブジェクトの値は必要に応じて変えてください。

openssl req -new -key /etc/pki/CA/private/client1_key.pem -out /etc/pki/CA/csr/client1_csr.pem -subj="/CN=client1/OU=DummyUnit/O=DummyOrg/L=hogehoge/ST=Tokyo/C=JP"

引数「-subj="(サブジェクト)"」を付けなければ、対話式でサブジェクトの設定となります。

証明書の発行

前回構築した認証局(CA)と作成したCSRを使って証明書を発行していきます。
通常、証明書を発行するときは対話式で発行の確認が行われますが、バッチに組み込むことを考えると応答を回避したいので引数「-batch」で回避します。
引数がまんまですね。

openssl ca -out /etc/pki/CA/newcerts/client1_cert.pem -in /etc/pki/CA/csr/client1_csr.pem -batch

尚、証明書には有効期限があります。OpenSSLのデフォルトでは、発行した証明書の有効期限は365日になっています。
有効期限を延ばしたい場合は、/etc/pki/tls/openssl.cnf にある以下の値を書き換えてください。

default_days    = 365                   # how long to certify for

証明書が発行されたら、必要に応じて証明書の中身を確認しましょう。

openssl x509 -in /etc/pki/CA/newcerts/client1_cert.pem -noout -text

インポート用にPKCS12形式に変換する

クライアント端末(WindowsのPCを想定)にクライアント証明書をインポートする際、クライアント証明書と秘密鍵がセットになったPKCS12という形式を利用するのが一般的かと考えているため、PKCS12形式に変換していきます。
まずはPKCS12形式のファイルを格納するフォルダを作りましょう。

mkdir /etc/pki/CA/pfx

次にPKCS12形式に変換していきます。
変換後の拡張子は「.pfx」になります。
また、引数「-passout」でパスワードを指定しているがこれは端末に証明書をインポートする際のパスワードになります。

openssl pkcs12 -export -inkey /etc/pki/CA/private/client1_key.pem -in /etc/pki/CA/newcerts/client1_cert.pem -out /etc/pki/CA/pfx/client1.pfx -passout pass:password

作成したPKCS12形式のファイルの中身を確認するコマンド。
引数「-passin」はインポート用のパスワードで、引数「-passout」はエクスポート用パスワードだけど、エクスポートした結果をテキストベースで画面に表示しているから、エクスポート用パスワードはダミーでよい。

openssl pkcs12 -in /etc/pki/CA/pfx/client2.pfx -info -passin pass:password -passout pass:dummy

小出しで申し訳ないですが、証明書の失効関連は次回回しになります。