OpenSSLでCA(認証局)を作成する。
実に8年ぶりの更新である。放置し過ぎだ、俺。
さて、この度OpenSSLでクライアント証明書を発行し、OCSP Responderを利用して証明書の状態を検証する必要があったので検証してみました。
またバッチに組み込む想定なので、なるべく対話式での設定を避けるようにしています。
かなり長くなったので、まずは認証局(CA)作成編から。
最初に構築環境を記載します。
OS:CentOS 8.1
OpenSSL:1.1.1.c
構築に入るところで、openssl.cnfを探します。
過去のバージョンでは /etc/ssl/ 辺りにあったと記憶していますが、このバージョンでは /etc/pki/tls になっているようです。
次に、CAを構築するディレクトリの確認になります。
cat /etc/pki/tls/openssl.cnf | grep ^dir | grep -v TSA
もし、構築するディレクトリを変えるのであれば、 /etc/pki/tls/openssl.cnf のdirの部分の値を変更してください。
今回はデフォルトの /etc/pki/CA をそのまま使います。
CA用ディレクトリの作成
CAを作成するディレクトリ、またその中の階層を作成します。
CAのRootディレクトリ作成
mkdir /etc/pki/CA
CA用ディレクトリ階層作成
mkdir /etc/pki/CA/certs
mkdir /etc/pki/CA/crl
mkdir /etc/pki/CA/newcerts
mkdir /etc/pki/CA/private
秘密鍵を格納するフォルダについては、アクセス権限を編子します。
chmod 700 /etc/pki/CA/private
CAの作成
いよいよ本題、CAの作成になります。
まずはCAの秘密鍵を作成、本来はセキュリティ上パスフレーズを付けるべき
なのですが、OCSPレスポンダーをバッチ起動させようとしているため、
パスフレーズ付けていません。
openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048
次にCA作成コマンドを投入します。
ここは1回しか使わないので対話式で設定しています。
また、パラメータはテスト用なので適当です。有効期限は5年(1825日)
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 1825
#以下は入力パラメータ
Country Name: JP
State or Province Name: Tokyo
Locality Name: hogehoge
Organization Name: TestON
Organizational Unit Name: TestUnit
Common Name: TestCA
Email Address: (入力無し)
秘密鍵にアクセス権限を設定します。
chown root:root /etc/pki/CA/private/cakey.pem
chmod 600 /etc/pki/CA/private/cakey.pem
自動生成されない構成ファイルを作成します。
touch /etc/pki/CA/index.txt #証明書データベース
echo "01" > /etc/pki/CA/serial #シリアル番号カウンター
echo "01" > /etc/pki/CA/crlnumber #証明書失効リストカウンター
openssl.cnf を編集し、証明書のサブジェクトに関するポリシーを変更して、入力値制限を緩和します。
また、発行する証明書の使用目的をクライアント証明書に変更します。
#policy = policy_match #コメントアウトします。
policy = policy_anything #ポリシー追加
(中略)
[ usr_cert ]
(中略)
nsCertType = client, email #コメントアウトされているので、先頭の#削除
以上でクライアント証明書を発行するためのCA(認証局)が作成できたと思います。
実際の証明書発行・OCSPレスポンダーの設定はまた別途記載する予定です。