手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 26.04 easy-rsa の基本 – 内部 CA と SAN 付き証明書を作成する

関連する記事

Ubuntu 26.04 で内部向けの TLS 証明書を用意する場合、公開 CA ではなく内部 CA を使う場面があります。easy-rsa は、小規模な内部 CA、検証環境、閉域サービス向けの証明書を作る時に扱いやすいツールです。

この記事では、easy-rsa で内部 CA を作り、SAN 付きサーバー証明書を発行し、成果物を確認する基本をまとめます。CA 証明書を各サーバーで信頼させる手順は、update-ca-certificates 側の記事につなげます。

この記事で扱うこと
  • easy-rsa で内部 CA を作成する流れ
  • CA 秘密鍵とサーバー秘密鍵の扱い
  • SAN 付きサーバー証明書の発行
  • 証明書、秘密鍵、CA 証明書の確認
  • 信頼ストアへ配布する対象の切り分け
対象 OSUbuntu 26.04 Server
主なパッケージeasy-rsaopenssl
CA 作業ディレクトリ例/root/easy-rsa-ca
発行対象例web01.example.local
重要な分離CA 秘密鍵、サーバー秘密鍵、CA 証明書、サーバー証明書
参考書籍
参考書籍
Bulletproof TLS and PKI
TLS、CA、証明書運用の考え方を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見る
このリンクは Amazon アソシエイトリンクです。

easy-rsa で決めること

最初に、CA をどこで管理するか、CA 秘密鍵をどこに置くか、証明書の有効期間をどうするか、発行対象の名前をどう付けるかを決めます。特に CA 秘密鍵は、サーバー証明書や CA 証明書とは扱いを分けます。

  • CA 秘密鍵を置くホストを限定する
  • 発行対象の FQDN と SAN を先に決める
  • サーバー秘密鍵は発行対象サーバー側で管理する
  • 配布するのは原則として CA 証明書とサーバー証明書
  • CA 秘密鍵を Web サーバーやクライアントへ配布しない

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

CA を管理するホストで easy-rsaopenssl をインストールします。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-ca

vars を設定する

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 nopass

SAN 付きサーバー証明書を作成する

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-certificates

TLS 設定で参照する

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 の切り分けがしやすくなります。

関連する記事
Ubuntu 26.04 easy-rsa の基本 – 内部 CA と SAN 付き証明書を作成する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る