EasyRSAで証明書を用意する / AlmaLinux9.4 on さくらのVPS

アフィリエイト広告を利用しています

このページの内容が役に立ったら X (旧twitter) でフォローして頂けると励みになります
挨拶や報告は無しで大丈夫です

さくらのVPS 2G にAlmaLinux9.4をインストールした覚書です。

VPN接続は暗号化通信となります。
ここでは暗号化通信で使用する証明書の準備をしていきます。

なお本番環境で利用される場合はここにある内容だけを鵜呑みにせずセキュリティ専門家に相談されることをお勧めします。

環境

実施日2024-06-18
サーバさくらのVPS 2G
OSAlmaLinux9.4
cat /etc/redhat-release
AlmaLinux release 9.4 (Seafoam Ocelot)

EasyRSAの気になるところ

EasyRSAってあまり聞き慣れないかもしれません。
多くの人にとって「証明書」と言えば有料の証明書を購入するか Let's Encrypt を使うかのどちらかになるかと思います。

ということで気になるところを確認しておきます。

EasyRSAとLet's Encrypt

「証明書」と聞くとLet's Encryptが連想されますね。
逆に EasyRSA は聞き慣れない名前です。

どちらも証明書を作成する手段になります。

結論から言うとEasyRSAがオススメです。
もちろんLet's Encryptでも設定することは可能です。

では何が違うのか?

私がEasyRSAを選ぶ理由の1つが有効期限の長さです。
Let's Encrypt だと有効期限が90日であることは有名ですね。
EasyRSA は 10年を上限として好きな期間を設定できます。

ほか細かい違いはあるのですが、もともと Let's Encrypt で行うつもりで進めていたのですが、調べていくうちに EasyRSA という結論になりました。

やっぱり決め手として大きいのは有効期限の長さでした

EasyRSAは「おれおれ証明書」ではないのか?

EasyRSAで生成した証明書は、認証局(CA)によって発行された証明書ではないため、厳密には「おれおれ証明書」と呼ばれます。
しかし、OpenVPN などで クライアント証明書認証 を使用する場合は問題なく使用できます。

「おれおれ証明書」 という言葉には、以下のようなネガティブなイメージがあります。

  • 信頼できない
  • 安全でない
  • 偽造しやすい

しかし、EasyRSA で生成した証明書は、次のような適切な設定と運用によって、これらの問題を克服することができます。

秘密鍵を安全に保管する:

秘密鍵は、証明書を発行するために使用される重要な情報です。秘密鍵が漏洩すると、証明書が偽造される可能性があります。そのため、秘密鍵は安全な場所に保管する必要があります。

証明書の失効を監視する

証明書には有効期限があります。有効期限が切れた証明書は無効であり、使用すべきではありません。証明書の失効を監視し、期限切れになったら更新する必要があります。

証明書の配布を制限する

証明書は、認証が必要なユーザーにのみ配布する必要があります。証明書が不特定多数に配布されると、偽造される可能性が高くなります。

上記の対策を講じることで、EasyRSA で生成した証明書を安全かつ信頼できる方法で使用することができます。

WEBブラウザのSSLと違って、VPNの場合はクライアントが限られてきます。
場合によっては自分が発行者であり自分しか利用者がいないこともあります。
そうなると認証局がなくても証明書の正しさは保証されていると同義になります。

EasyRSAで証明書を作成する準備

それでは証明書を作成していきます。

Let'sEncryptやその他の方法で証明書を用意される方はここから先はスキップして別途ご用意ください。

easy-rsaをインストールする

dnf --enablerepo=epel install easy-rsa

インストールできない

「強制終了」や「Killed」と表示される場合はメモリ不足が考えられます。

「え、VPSのプランを変えるところからやり直し?」
と心配になるかもしれませんが大丈夫です。

下記のページよりSwapメモリを設定するとインストールできるようになります。
※メモリ500MBプランで、Swap 500MB でインストールできました。

Swap メモリを設定する / AlmaLinux9.4 on さくらのVPS

EasyRSAのバージョンを確認

DNFでインストールしただけではパスが通ってなさそうです。
下記のようにして確認します。

ls -la /usr/share/easy-rsa/

バージョンのフォルダが出来ていました。

/usr/share/easy-rsa/3.1.6/easyrsa --version

証明書の設定

Easy-RSA ディレクトリの設定

DNFでインストールして出来たファイルを /etc/ 以下にコピーします。

mkdir -p /etc/openvpn/easy-rsa
cp -r /usr/share/easy-rsa/3/* /etc/openvpn/easy-rsa/
cd /etc/openvpn/easy-rsa/

PKIの初期化

PKI (Public Key Infrastructure) ディレクトリを初期化します。

./easyrsa init-pki

varsファイルの作成と編集

証明書の有効期限を設定します

cp ./pki/vars.example ./pki/vars
vi ./pki/vars

コメントになっているので、先頭の # を外します。

144行目

# 証明書の有効期限の設定 (日数)
# 例: 7300日 = 20年
set_var EASYRSA_CA_EXPIRE    7300

148行目

# 中間証明書の有効期限 (日数)
# 例: 7300日 = 20年
set_var EASYRSA_CERT_EXPIRE  7300

154行目

# CRL(証明書失効リスト)の有効期限 (日数)
# 例: 7300日 = 20年
set_var EASYRSA_CRL_DAYS       180

各種証明書を作成する

CA証明書を作成

ルート証明書を作成します。
3.1.6 では varsファイルを source しなくなりました。
次のようにパラメータとして渡します。

./easyrsa --vars=pki/vars build-ca

最初にパスフレーズの入力になります。

続けて確認です。同じパスフレーズを入力します。

Common Name にはサーバー名(ドメイン)を入力します。

作成に成功すると次のように表示されます。
最終行に書かれているパスにファイルが作成されています。

サーバ証明書を作成

「./easyrsa build-server-full」を使用する方法もあります。
「build-server-full」は、下記の2つの手順をまとめて実行するためのコマンドです。

./easyrsa --vars=pki/vars gen-req server nopass

Common Name にはサーバー名(ドメイン)を入力します。

作成に成功すると次のように表示されます。
最終行に書かれているパスにファイルが作成されています。

/etc/openvpn/easy-rsa/pki/reqs/server.req
./easyrsa --vars=pki/vars sign-req server server

Confirm request details: は「yes」で継続します。

最初の方で設定したパスフレーズを入力します。

作成に成功すると次のように表示されます。
最終行に書かれているパスにファイルが作成されています。

CRLを作成

CRL(Certificate Revocation List)とは、証明書失効リストのことです。これは、特定のデジタル証明書がもはや信頼できないと判断された場合、その証明書を失効させるためのリストです。CRLは公開され、証明書の有効性を確認する際に参照されます。

./easyrsa --vars=pki/vars gen-crl

最初の方で設定したパスフレーズを入力します。

作成に成功すると次のように表示されます。
最終行に書かれているパスにファイルが作成されています。

生成されたCRLファイル(pki/crl.pem)をVPNサーバーが参照するディレクトリに配置します。

cp pki/crl.pem /etc/openvpn/

ta.key を作成

ta.keyファイルはTLS認証に使用されるキーで、OpenVPNの設定で必要です。
次の手順でta.keyファイルを生成し、適切な場所に配置します。

移動する

cd /etc/openvpn

taファイルの作成

openvpn --genkey secret ta.key

元のディレクトリに戻る

cd /etc/openvpn/easy-rsa

Diffie-Hellman パラメータを作成

Diffie-Hellman (DH) パラメータは、セキュアな鍵交換を行うための数学的なパラメータです。
OpenVPNを含む多くのVPNソフトウェアは、セキュアな通信の確立にこの鍵交換プロトコルを使用しています。

./easyrsa gen-dh

作成に成功すると次のように表示されます。
最終行に書かれているパスにファイルが作成されています。

ファイルを適切な場所にコピーします。

cp pki/dh.pem /etc/openvpn/