能書き
私的サーバー構築日誌:仕切り直しからの自宅サーバー構築、前回の続きです。
証明書の話は以前もやりまして、その焼き直しですが。そのまま再掲でも詰まらないので、関連コマンドをDockerコンテナの中に封じ込めます。その辺は前回同様ですな。
目標
- 証明書(サーバー鍵)を作成します。
- easy-rsaを使用して構築したオレオレ認証局で、証明書を認証します。
- 前回構築したDockerコンテナ内で操作します。
参考文献
- easy-rsaで簡単に自宅CA構築+自己証明書発行 - paloma blog
- easy-rsaでプライベートCA(認証局)を作ってオレオレ証明書ではないローカル用TLS証明書の管理をする
- 【AWS Client VPN】OpenVPN easy-rsaでサーバ証明書の有効期限を100年にする - (技)DENET 技術ブログ
認証局のDockerコンテナ
前回構築した通りなら、操作ユーザーはcert
になります。
CA_USER=cert
sudo su $CA_USER
Dockerコンテナを起動し、コンテナ内に入ります。
cd
docker compose up -d
docker compose exec -e CA_USER=$USER ca /bin/bash
su $CA_USER
前回構築した通りなら、認証局の名前はdemoCA
になります。
CA_NAME=demoCA
認証局のディレクトリに移動します。
cd /mnt/$CA_NAME
サーバー鍵
有効期限
これから作る証明書の有効期限を100年にしておきます。忘れた頃に期限が切れるとパニクりますので。
前回の続きでしたら、CAの有効期限は設定しましたが、証明書の有効期限は設定していません。
grep EASYRSA_CERT_EXPIRE pki/vars
この場合は下記のコマンドを実行します。EASYRSA_CERT_EXPIRE
の設定が済んでいたら下記は不要です。
期間はお好みで。今回は100年にしました。
echo 'set_var EASYRSA_CERT_EXPIRE "36524"' >>pki/vars
鍵生成
EasyRSA の新しいバージョンでは、秘密鍵やCSR(Certificate Signing Request、証明書署名要求)を作らなくてよいらしい。コマンド一発で全部やってくれちゃいます。
サーバー名がexample.home
の場合、下記コマンドを実行します。
途中で認証局 demoCA のパスフレーズを要求されますので、それを入力します。
SV_NAME=example.home
./easyrsa build-server-full $SV_NAME nopass
生成された各ファイルは、pkiディレクトリ内の各サブディレクトリに格納されます。
- 秘密鍵:
pki/private
- 証明書要求:
pki/reqs
- 証明書:
pki/issued
鍵確認
生成した鍵を確認しましょう。
openssl x509 -text -in pki/issued/$SV_NAME.crt -text | grep -E "Issuer:|Subject:"
openssl x509 -dates -noout -in pki/issued/$SV_NAME.crt
今回はこんな結果になる筈です。有効期限は100年後になっています。
$ openssl x509 -text -in pki/issued/$SV_NAME.crt -text | grep -E "Issuer:|Subject:"
Issuer: CN = demoCA
Subject: CN = example.home
$ openssl x509 -dates -noout -in pki/issued/$SV_NAME.crt
notBefore=Oct 17 09:07:27 2023 GMT
notAfter=Oct 17 09:07:27 2123 GMT
コンテナ停止
鍵を生成できたら、Dockerコンテナは停止しておきましょう。
exit
exit
docker compose down
仕舞い
鍵を作って署名するのは簡単でした。
本当は、この鍵を仕込んで何かのサーバーが暗号化されるのを確認したかったのですが、それはまた今度。サーバーを何も立てていないので。うーん残念。