LoginSignup
3
2

More than 1 year has passed since last update.

自宅サーバー構築譚:オレオレ認証局

Last updated at Posted at 2022-11-22

能書き

自宅サーバー構築譚:基本構想に基づく自宅サーバー構築の続き。

ものすご~く端的に言うと。

周知の通り、証明書はそれだけでは用を為しません。証明書が正しい事を証明する為に電子署名する機関が認証局であり、取り敢えず無条件で信用するのがルート認証局です。全ての署名はこのルート認証局の信用に依って成り立っています。

ルート認証局は、通常は社会的合意に基づいて信用されます。しかしコストなどの問題から私的用途の為にはルート認証局を自分で用意する事があります。これがプライベート認証局、通称オレオレ認証局です。

このような認証基盤の全貌を PKI と呼びます。

これについては下記文献に丁寧な説明があります。

参考文献:認証局(CA)の役割 ~PKI基礎②~ - マイクロソフ党ブログ
参考文献:電子メールのセキュリティ(5) ~ 認証局(CA)とPKI ~ - 基礎からわかる!パソコン入門・再入門

Ubuntu にはデフォルトで OpenSSL がインストールされています。これでオレオレ認証局を作る事も出来ますが、手順が少々面倒臭い。
例えば下記の記事が図解も入っていて分かり易い。しかしこの記事は CentOS なんですよね。残念。

参考文献:OpenSSLでプライベート認証局の構築(ルートCA、中間CA) - Qiita

Ubuntu の場合は下記が参考になりそうです。微妙に古くなりかけていますが。

参考文献:Ubuntu 18.04 LTS で OpenSSL を使ったプライベート認証局&証明書を作る - 未完放流

なお、 OpenVPN プロジェクトの中でこの手間を軽減するツールが作られているようで、 easy-rsa と呼ばれています。 easy-rsa を用いた手順は、ちょっとぐぐればそこら中に解説記事があります。例えば下記など。

参考文献:easy-rsaでプライベートCA(認証局)を作ってオレオレ証明書ではないローカル用TLS証明書の管理をする
参考文献:easy-rsa 3 で認証局を構築する - yamata::memo

因みに、認証局なんて面倒臭い事をしないでドカンとオレオレ証明書を作っちまえ!と思ったら、少なくとも Kerberos ではうまくいかないらしい。

参考文献:KerberosのバックグラウンドにOpenLDAPを使う - Qiita

そういう訳で、この記事では easy-rsa を使ってみます。使わない場合も考えたんですが、心が折れました。

追伸。LDAP も TLS とかで証明書が活躍する使い方があります。LDAP の記事より先に今回の記事を書くべきだったかも。まぁいいか。

参考文献:LDAP & TLS - Ubuntu Server

easy-rsa のインストール

スナップショット

スナップショットだいじ。超だいじ。

zfs snapshot tank/main/ubuntu@$(date +%Y%m%d_%H%M%S)_before_OpenSSL

インストール

apt-get install easy-rsa

ただ、なぜかOpenSCのパッケージが同時にインストールされます。ICカードリーダのライブラリのようですが、理由の見当が付きません。ぐぐっても解説記事が無いようですし。よくわかりません。

The following NEW packages will be installed:
  easy-rsa libccid libpcsclite1 opensc opensc-pkcs11 pcscd

/etc バージョン管理

インストール直後の /etc をバージョン管理します。まずは確認。

svn st /etc

こう表示されました。

?       /etc/init.d/pcscd
M       /etc/ld.so.cache
?       /etc/libccid_Info.plist
?       /etc/opensc
?       /etc/rc0.d/K01pcscd
?       /etc/rc1.d/K01pcscd
?       /etc/rc2.d/K01pcscd
?       /etc/rc3.d/K01pcscd
?       /etc/rc4.d/K01pcscd
?       /etc/rc5.d/K01pcscd
?       /etc/rc6.d/K01pcscd
?       /etc/reader.conf.d
?       /etc/systemd/system/sockets.target.wants/pcscd.socket
M       /etc/zfs/zpool.cache

pcscd関係のみの模様ですが、これをcommitします。

svn st /etc | grep "^?" | cut -b9- | xargs -I{} find {} -type f -or -type d -or -type l | xargs -t svn add
svn ci /etc -m"installed Easy RSA"

専用ユーザは作りません

本当はここでCA管理用ユーザを作るのですが。このサーバ構築では、後に Kerberos を利用したユーザ管理を導入しようと考えてますので、新規ユーザはそれまでお預けにします。今回は root ユーザでCAを管理する事にします。

easy-rsa を利用したルート認証局の作成

公開鍵インフラストラクチャ(PKI)ディレクトリの準備

root のホームディレクトリではなく /opt/CA ディレクトリに作成します。

mkdir -p /opt/CA
chmod 700 /opt/CA/
cd /opt/CA/
mkdir demoCA
cd demoCA/
ln -s /usr/share/easy-rsa/* .
./easyrsa init-pki

認証局(CA)の作成

まずは所定のディレクトリにvarsファイルを作成します。
/opt/CA/demoCA/vars.exampleというファイルがあるのでこれを編集すれば良さそうですが、ここでは下記のように新規作成します。
それぞれの値は自分の状況に応じて修正して下さい。

cat <<___ >vars
set_var EASYRSA_ALGO      "ec"
set_var EASYRSA_DIGEST    "sha512"
set_var EASYRSA_CA_EXPIRE "36500"
___

次に、認証局のルート公開鍵と秘密鍵のペアを作成します。

下記コマンドを実行すると、キーペアのパスフレーズを入力するように求められます。必ず強力なパスフレーズを入力し、安全な場所に書き留めます。

更に、CAの共通名(CN; Common Name)を確認するように求められます。CNは、認証局のコンテキストでこのマシンを参照するために使用される名前です。任意の文字列を入力できますが、インターネット上で使う予定があれば自分の所有しているドメインにするのが良いでしょう。今回はLAN内のDNSサーバで管理しているマシン名にします。

./easyrsa build-ca

もしも下記のように.rndファイルを開けないエラーが発生したら。

Can't load /opt/CA/demoCA/pki/.rnd into RNG

放っておいても良さそうです。
参考文献:/root/.rndをRNGにロードできません。どこにありますか、またはどのように作成しますか? - web-development-kb-ja.site

手当をしたいなら、下記コマンドを実行します。
参考文献:1. 公開鍵を作る - ファイルの暗号化ならopenssl smimeだ! - ファイルをお手軽に暗号化したい! – openssl cms のススメ - IIJ Engineers Blog

openssl rand -writerand /opt/CA/demoCA/pki/.rnd

根本解決の為には/etc/ssl/openssl.cnfを修正しろ、と下記参考文献には書いてあります。しかしRANDFILEなるキーワードが存在しません。実際には/usr/share/easy-rsa/openssl-easyrsa.cnfRANDFILEの記述があるようですが、ちょっと怖いのでこのファイルの修正は諦めました。
参考文献:OpenSSLでCSRを発行したときに”.rnd”が開けないというエラーが出た - memo.

パスフレーズとCNを入力して成功すると、下記の2ファイルが生成されます。

  • CAの公開鍵 /opt/CA/demoCA/pki/ca.crt
  • CAの秘密鍵 /opt/CA/demoCA/pki/private/ca.key

秘密鍵は絶対に漏らしてはいけない物になります。/opt/CAディレクトリも権限設定に注意しましょう。

内容確認

作った認証局の内容を確認します。下記の実行例は、作成時にCN(Common Name)としてdemoCAを指定した場合の結果です。

参考文献:opensslコマンドでサーバーにアクセスして確認する - opensslコマンドを使ったSSL証明書の確認方法 - やさしいopensslコマンドによるSSL証明書の確認方法 - Oji-Cloud
参考文献:証明書の期限確認 - 発行されたSSL証明書の内容 - SSL証明書の内容をopensslで確認する

# cd pki/
# openssl x509 -text -in ca.crt | grep -E "Issuer:|Subject:"
        Issuer: CN = demoCA
        Subject: CN = demoCA
# openssl x509 -dates -noout -in ca.crt
notBefore=Nov 20 07:38:39 2022 GMT
notAfter=Nov 17 07:38:39 2032 GMT

各端末にCAの公開鍵(ca.crt)をルート証明書としてインポート

やり方はOSによって異なります。それぞれの手順で実施して下さい。
UbuntuとAndroidの場合は参考文献を参照。

参考文献:使用する各端末にCAの公開鍵(ca.crt)をルート証明書としてインポート - easy-rsaでプライベートCA(認証局)を作ってオレオレ証明書ではないローカル用TLS証明書の管理をする - R O HEAD -yajiri-

仕舞い

ルート認証局、通称オレオレ認証局を作成しました。役に立つのは証明書を作成した時になりますが、その作成手順は次回にします。

利用するマシンすべてへインポートが必要なのでちょっと面倒ですが、自分だけの証明書を無料で設定する準備が出来ました。やったね:thumbsup_tone2:

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2