証明書とは?
証明書とは、ある事柄の真実が明確であることを証拠だてて文書にしたものです。
https通信を行う場合は、通信データを暗号化するために鍵が必要です。この鍵の所有者の情報を証明するものが「電子証明書」、証明書を発行する機関を「認証局」といいます。
「自分は弁護士です」だけでは信用しにくいですが、弁護士会が「この人は弁護士です」と認めて弁護士バッジを与えている方は信用度が高いでしょう。この場合の弁護士会が「認証局」、弁護士バッジが「証明書」という感じです。
インターネット上で利用する証明書は、通常、証明書を発行する事業者へ作成してもらいます。有料のものが多いですが、Let’s Encryptなど暗号化通信することのみを目的にした無料のものもあります。無料のものは、個人ブログ、小規模サイト、テスト用のサイト、有料の証明書を発行するまでの一時的な用途などで使われます。
しかしローカル環境を指定するlocalhostでは電子証明書は発行できないので、自分で認証局を作り証明書を発行する必要があります。このように作成した認証局や証明書を「プライベート認証局」「プライベート証明書(または、オレオレ証明書)」といいます。
環境
Ubuntu24.04の環境を前提とします。
作り方
OpenSSLをインストールして作る方法が一般的でしたが、もっと簡単に作ることができるEasyRSA を利用することにします。EasyRSAは、OpenVPNから提供されています。
インストール
バージョンを確認するには、以下のコマンドを実行します。
apt list -a openvpn easy-rsa
インストールされていない場合は、以下のコマンドを実行してインストールします。
sudo apt install easy-rsa
作業用ディレクトリを作成し、シンボリックリンクを作成します。
cd ~
mkdir ~/easy-rsa
ln -s /usr/share/easy-rsa/* ~/easy-rsa/
chmod 700 ~/easy-rsa
各種設定ファイル「vars」を作成
サンプルが用意されているので、これを基に作成します。
cp /usr/share/easy-rsa/vars.example ~/easy-rsa/vars
varsの以下の箇所のコメントを解除し、必要に応じて内容を編集します。
set_var EASYRSA_REQ_COUNTRY "US"
set_var EASYRSA_REQ_PROVINCE "California"
set_var EASYRSA_REQ_CITY "San Francisco"
set_var EASYRSA_REQ_ORG "Copyleft Certificate Co"
set_var EASYRSA_REQ_EMAIL "me@example.net"
set_var EASYRSA_REQ_OU "My Organizational Unit"
# それぞれの期間を約100年へ変更
set_var EASYRSA_CA_EXPIRE 36500
set_var EASYRSA_CERT_EXPIRE 36500
PKI(Public Key Infrastructure:公開鍵暗号基盤)環境の初期化を行います。
cd ~/easy-rsa
./easyrsa init-pki
出力結果の「Using Easy-RSA configuration」が作成したvarsファイルであれば、設定が利用されています。
認証機関(Certificate Authority:CA)の構築
このとき「Common Name」を求められますが、空欄のままでも良いです。
./easyrsa build-ca nopass
~/easy-rsa/pki/ca.crt が作成されていると成功です。
秘密鍵と証明書を作成
ドメインの指定にはワイルドカードが利用できます。サブドメインを追加する予定がある場合は、ワイルドカード証明書を作成すると良いでしょう。
このとき「Common Name」を求められますので、ワイルドカードを利用したドメイン名を入力します(例:*.example.test)。
./easyrsa --subject-alt-name='DNS:*.example.test,DNS:example.test' gen-req example.test nopass
署名要求:req: ~/easy-rsa/pki/reqs/example.test.req
秘密鍵:key: ~/easy-rsa/pki/private/example.test.key
ができれば成功です。
ウェブサーバのhttps接続設定で指定する秘密鍵を上記のパスに設定すると、この秘密鍵が利用されます。
証明書を発行
このとき「Confirm request details」を求められます。継続するためにyesと入力します。
./easyrsa --subject-alt-name='DNS:*.example.test,DNS:example.test' sign-req server example.test
ウェブサーバのhttps接続設定で指定する証明書を上記のパスに設定すると、この証明書が利用されます。
確認
ウェブサーバの再起動は、以下のコマンドを実行します。
sudo systemctl restart apache2
ウェブサーバを再起動してからウェブブラウザでアクセスし、証明書を確認します。
今回はプライベート認証局で証明書を作成したので、ブラウザが知らない認証局ということで警告が表示されるかと思います。例外扱いとしてアクセスできるように進めましょう。
作成した証明書の内容が反映していると成功です。
おまけ
EasyRSAはデフォルトでRSAを使用しますが、楕円曲線とツイステッドエドワーズ曲線が利用できるようです。Firefox125.0.2(Snap版)で試したところ、楕円曲線は認識しましたがツイステッドエドワーズ曲線はSSL_ERROR_NO_CYPHER_OVERLAPエラーとなりました。
コメント