能書き
おうちサーバー構築報告:予告からのおうちサーバー構築の続きです。
オレオレ認証局の構築は以前もやりましたが、今回はシェルスクリプトにまとめてみました。
認証局の概要は以前の記事を参照して下さい。今回は省略します。
目標
- easy-rsaを使用してルート認証局を作る所までを実施
- 一連のコマンド操作をシェルスクリプト化
参考文献
- 私的サーバー構築日誌:オレオレ認証局 - Qiita
- 自宅サーバー構築譚:オレオレ認証局 - Qiita
- 私的サーバー構築日誌:オレオレ認証局が認証する証明書 - Qiita
- 自宅サーバー構築譚:オレオレ認証局が認証する証明書 - Qiita
認証局の構築
cd
cat <<"___" >buildCert.sh
CA_USER=$1
apt update
apt upgrade -y
apt install -y easy-rsa
cd /etc
svn st | grep "^?" | cut -b9- | xargs -I{} find {} -type f -or -type d -or -type l | xargs -t svn add
svn ci -m"install Easy RSA"
useradd -m -s /bin/bash $CA_USER
svn ci -m"add user $CA_USER" /etc
___
chmod 755 buildCert.sh
./buildCert.sh cert
su - cert
cat <<"___" >buildCA.sh
#!/bin/bash
CA_NAME=$1
CA_EXPIRE=$2
cd
mkdir $CA_NAME
cd $CA_NAME
ln -s /usr/share/easy-rsa/* .
./easyrsa init-pki
cat <<___A >vars
set_var EASYRSA_ALGO "ec"
set_var EASYRSA_DIGEST "sha512"
set_var EASYRSA_CA_EXPIRE $CA_EXPIRE
set_var EASYRSA_CERT_EXPIRE $CA_EXPIRE
___A
./easyrsa build-ca
___
chmod 755 buildCA.sh
CA_NAME=demoCA
./buildCA.sh $CA_NAME 36524
このシェルスクリプトbuildCA.sh
を実行すると、キーペアのパスフレーズを入力するように求められます。必ず強力なパスフレーズを入力し、安全な場所に書き留めます。
更に、CAの共通名(CN; Common Name)を確認するように求められます。CNは認証局のコンテキストでこのマシンを参照するために使用される名前です。任意の文字列を入力できますが、インターネット上で使う予定があれば自分の所有しているドメインにするのが良いでしょう。今回は例としてexample.com
にします。
パスフレーズとCNを入力して成功すると、下記の2ファイルが生成されます。
- CAの公開鍵
/home/cert/demoCA/pki/ca.crt
- CAの秘密鍵
/home/cert/demoCA/pki/private/ca.key
秘密鍵は絶対に漏らしてはいけない物になります。
公開鍵の内容を確認
openssl x509 -text -in $HOME/$CA_NAME/pki/ca.crt | grep -E "Issuer:|Subject:"
openssl x509 -dates -noout -in $HOME/$CA_NAME/pki/ca.crt
こんな感じになります。
$ openssl x509 -text -in $HOME/$CA_NAME/pki/ca.crt | grep -E "Issuer:|Subject:"
Issuer: CN = example.com
Subject: CN = example.com
$ openssl x509 -dates -noout -in $HOME/$CA_NAME/pki/ca.crt
notBefore=Dec 29 07:26:07 2024 GMT
notAfter=Dec 29 07:26:07 2124 GMT
オレオレ認証局が認証するサーバー証明書
サーバー証明書を生成して認証
例えばサーバーnetwork.local
に対するサーバー証明書をパスフレーズ無しで生成する例は下記のようになります。
SRV_NAME=network.local
cd $HOME/$CA_NAME
./easyrsa build-server-full $SRV_NAME nopass
生成された各ファイルは、pkiディレクトリ内の各サブディレクトリに格納されます。
- 秘密鍵:
pki/private
- 証明書要求:
pki/reqs
- 証明書:
pki/issued
公開鍵の確認
公開鍵の内容を確認します。
openssl x509 -text -in pki/issued/$SRV_NAME.crt -text | grep -E "Issuer:|Subject:"
openssl x509 -dates -noout -in pki/issued/$SRV_NAME.crt
下記のようになります。
$ openssl x509 -text -in pki/issued/$SRV_NAME.crt -text | grep -E "Issuer:|Subject:"
Issuer: CN = example.com
Subject: CN = network.local
$ openssl x509 -dates -noout -in pki/issued/$SRV_NAME.crt
notBefore=Dec 29 07:27:35 2024 GMT
notAfter=Dec 29 07:27:35 2124 GMT
仕舞い
ルート認証局、通称オレオレ認証局を作成しました。そしてそのオレオレ認証局が認証するサーバー証明書を作成しました。
利用するマシン全部にオレオレ認証局のインポートが必要なのでちょっと面倒ですが、自分だけの証明書を無料で設定する準備が出来ました。