Ubuntu 26.04 で内部向けの TLS 証明書を用意する場合、公開 CA ではなく内部 CA を使う場面があります。easy-rsa は、小規模な内部 CA、検証環境、閉域サービス向けの証明書を作る時に扱いやすいツールです。
この記事では、easy-rsa で内部 CA を作り、SAN 付きサーバー証明書を発行し、成果物を確認する基本をまとめます。CA 証明書を各サーバーで信頼させる手順は、update-ca-certificates 側の記事につなげます。
easy-rsaで内部 CA を作成する流れ- CA 秘密鍵とサーバー秘密鍵の扱い
- SAN 付きサーバー証明書の発行
- 証明書、秘密鍵、CA 証明書の確認
- 信頼ストアへ配布する対象の切り分け
| 対象 OS | Ubuntu 26.04 Server |
|---|---|
| 主なパッケージ | easy-rsa、openssl |
| CA 作業ディレクトリ例 | /root/easy-rsa-ca |
| 発行対象例 | web01.example.local |
| 重要な分離 | CA 秘密鍵、サーバー秘密鍵、CA 証明書、サーバー証明書 |
easy-rsa で決めること
最初に、CA をどこで管理するか、CA 秘密鍵をどこに置くか、証明書の有効期間をどうするか、発行対象の名前をどう付けるかを決めます。特に CA 秘密鍵は、サーバー証明書や CA 証明書とは扱いを分けます。
- CA 秘密鍵を置くホストを限定する
- 発行対象の FQDN と SAN を先に決める
- サーバー秘密鍵は発行対象サーバー側で管理する
- 配布するのは原則として CA 証明書とサーバー証明書
- CA 秘密鍵を Web サーバーやクライアントへ配布しない
easy-rsa をインストールする
CA を管理するホストで easy-rsa と openssl をインストールします。CA 作業ディレクトリは、ここでは /root/easy-rsa-ca とします。
sudo apt update
sudo apt install -y easy-rsa openssl
sudo make-cadir /root/easy-rsa-ca
sudo ls -la /root/easy-rsa-cavars を設定する
easy-rsa の既定値を vars に置きます。組織名や有効期間は環境に合わせて変更します。
sudo tee /root/easy-rsa-ca/vars >/dev/null <<'EOF'
set_var EASYRSA_REQ_COUNTRY "JP"
set_var EASYRSA_REQ_PROVINCE "Tokyo"
set_var EASYRSA_REQ_CITY "Tokyo"
set_var EASYRSA_REQ_ORG "Example Internal"
set_var EASYRSA_REQ_EMAIL "admin@example.local"
set_var EASYRSA_REQ_OU "Server Operations"
set_var EASYRSA_ALGO "ec"
set_var EASYRSA_DIGEST "sha256"
set_var EASYRSA_CA_EXPIRE 3650
set_var EASYRSA_CERT_EXPIRE 825
EOF
sudo chmod 0600 /root/easy-rsa-ca/vars内部 CA を作成する
作業ディレクトリで PKI を初期化し、内部 CA を作成します。CA 秘密鍵を保護したい場合は、nopass を付けずにパスフレーズ付きで作成します。
cd /root/easy-rsa-ca
sudo ./easyrsa init-pki
sudo ./easyrsa build-ca自動化や検証環境でパスフレーズなしの CA を使う場合は、リスクを理解したうえで作業ホストとファイル権限を強く制限します。
cd /root/easy-rsa-ca
sudo ./easyrsa init-pki
sudo ./easyrsa build-ca nopassSAN 付きサーバー証明書を作成する
TLS クライアントは、Common Name だけではなく SAN を見てホスト名を検証します。Web サーバーや内部 API 用の証明書では、DNS 名や必要な IP アドレスを SAN に含めます。
cd /root/easy-rsa-ca
sudo ./easyrsa --subject-alt-name="DNS:web01.example.local,DNS:web01,IP:192.0.2.10" build-server-full web01 nopass発行物を確認する
作成後は、CA 証明書、サーバー証明書、サーバー秘密鍵の場所と内容を確認します。秘密鍵そのものは画面や記事に貼り付けず、権限と配置先で管理します。
cd /root/easy-rsa-ca
sudo ls -l pki/ca.crt
sudo ls -l pki/issued/web01.crt
sudo ls -l pki/private/web01.key
sudo openssl x509 -in pki/issued/web01.crt -noout -subject -issuer -dates
sudo openssl x509 -in pki/issued/web01.crt -noout -ext subjectAltName証明書と鍵を配置する
発行対象サーバーへ配置するのは、サーバー証明書とサーバー秘密鍵です。CA 証明書はクライアントや検証元の信頼ストアへ配布します。ここでは配置先の例だけを示します。
sudo install -d -o root -g root -m 0755 /etc/ssl/example
sudo install -o root -g root -m 0644 web01.crt /etc/ssl/example/web01.crt
sudo install -o root -g root -m 0600 web01.key /etc/ssl/example/web01.key
sudo install -o root -g root -m 0644 example-ca.crt /usr/local/share/ca-certificates/example-ca.crt
sudo update-ca-certificatesTLS 設定で参照する
Web サーバーやメールサーバーでは、サーバー証明書とサーバー秘密鍵を設定に指定します。CA 証明書の信頼設定は、接続するクライアント側で行います。
sudo openssl x509 -in /etc/ssl/example/web01.crt -noout -subject -issuer -dates
sudo openssl x509 -in /etc/ssl/example/web01.crt -noout -ext subjectAltName
sudo ls -l /etc/ssl/example/web01.key検証する
証明書を配置したら、対象サービスを再読み込みし、実際の名前で TLS 検証します。SAN に入っていない名前で接続すると、証明書検証は失敗します。
openssl verify -CAfile /usr/local/share/ca-certificates/example-ca.crt /etc/ssl/example/web01.crt
openssl s_client -connect web01.example.local:443 -servername web01.example.local -verify_return_error
curl -v https://web01.example.local/確認ポイント
- CA 秘密鍵を管理ホストに限定している
- サーバー証明書に必要な SAN が入っている
- サーバー秘密鍵の権限が
0600になっている - CA 証明書とサーバー証明書を混同していない
- 接続する名前で TLS 検証している
- CA 証明書の信頼設定は接続元側で確認している
まとめ
Ubuntu 26.04 で easy-rsa を使うと、小規模な内部 CA と SAN 付きサーバー証明書を比較的少ない手順で作成できます。重要なのは、CA 秘密鍵、CA 証明書、サーバー証明書、サーバー秘密鍵を分けて扱うことです。
作成した CA 証明書は、接続元ホストの信頼ストアへ登録します。サーバー側の証明書配置と、クライアント側の CA 信頼設定を分けて確認すると、TLS の切り分けがしやすくなります。

