HTTPS 化(応用編)
このページでは、Apache2 を HTTPS(443番) に対応させるための手順を、 3つのケース(単一ドメイン / 複数ドメイン / 単一→複数への拡張) に分けて体系的に解説します。 OpenSSL を使って ローカル CA(認証局) を作成し、 サーバー証明書を発行する方法を、初心者にも分かりやすくまとめています。
最終更新:
【更新情報】:単一ドメイン・複数ドメイン・移行ケースの3章構成に再編成し、SAN の説明を整理しました。
1. HTTPS とは?(仕組みの基礎)
HTTPS は、HTTP 通信に 暗号化(SSL/TLS) を追加した仕組みです。 暗号化に加えて、通信相手が本物であることを証明する仕組み を持っています。
この「本物である証明」を行うのが 認証局(CA) です。 ブラウザはあらかじめ信頼できる CA の一覧を持っており、 その CA が署名した証明書だけを安全と判断します。
ローカル環境では、自分で CA(localCA)を作成し、 その CA でサーバー証明書を署名することで HTTPS を利用できます。
※ ローカル CA は世界のブラウザに登録されていないため、 ブラウザに ca.crt を登録する必要があります。
A. 単一ドメインを HTTPS 化する(miyada.home)
まずは最も基本的なケースである、 単一ドメイン(miyada.home)だけを HTTPS 化する手順 を説明します。
このケースでは SAN(Subject Alternative Name)は不要 です。 CSR の Common Name(CN)に miyada.home を指定するだけで HTTPS 化できます。
A-1. ローカル CA(認証局)を作成
まず、ローカル CA 用のフォルダを作成します。
mkdir ~/localCA
次に、CA の秘密鍵と証明書を作成します。
openssl genrsa -out ~/localCA/ca.key 2048
openssl req -new -x509 -days 3650 \
-key ~/localCA/ca.key \
-out ~/localCA/ca.crt \
-subj "/CN=InaPC-Local-CA"
これでローカル CA(ca.crt / ca.key)が完成しました。
A-2. 単一ドメイン用 CSR を作成
miyada.home 用の秘密鍵を作成します。
openssl genrsa -out ~/localCA/miyada.home.key 2048
次に CSR(証明書署名要求)を作成します。
openssl req -new \
-key ~/localCA/miyada.home.key \
-out ~/localCA/miyada.home.csr \
-subj "/CN=miyada.home"
※ 単一ドメインの場合、SAN の設定は不要です。
A-3. サーバー証明書を署名(SAN 不要)
ローカル CA を使って証明書を署名します。
openssl x509 -req \
-in ~/localCA/miyada.home.csr \
-CA ~/localCA/ca.crt -CAkey ~/localCA/ca.key \
-CAcreateserial \
-out ~/localCA/miyada.home.crt \
-days 365 -sha256
これで miyada.home.crt(サーバー証明書)が完成しました。
A-4. Apache の 443番 VirtualHost を作成
HTTPS 用の VirtualHost を作成します。
sudo nano /etc/apache2/sites-available/miyada-ssl.conf
以下を入力します:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName miyada.home
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /home/ユーザー名/localCA/miyada.home.crt
SSLCertificateKeyFile /home/ユーザー名/localCA/miyada.home.key
<Directory /var/www/html>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/miyada_ssl_error.log
CustomLog ${APACHE_LOG_DIR}/miyada_ssl_access.log combined
</VirtualHost>
</IfModule>
設定を有効化します。
sudo a2enmod ssl
sudo a2ensite miyada-ssl.conf
sudo systemctl reload apache2
A-5. ブラウザに CA を登録
ローカル CA(ca.crt)は世界のブラウザに登録されていないため、 ブラウザに ca.crt を登録する必要があります。
Windows の証明書ストアに登録するのが最も確実です。
- Windows で
ca.crtをダブルクリック - 「証明書のインストール」
- 「ローカル コンピューター」
- 「信頼されたルート証明機関」へ登録
※ Edge / Chrome は Windows の証明書ストアを参照します。
A-6. 動作確認
ブラウザで次の URL にアクセスします:
https://miyada.home
鍵マークが表示されれば成功です。
B. 複数ドメインを HTTPS 化する(SAN 設定)
次は、複数のドメイン名を 1 枚の証明書で HTTPS 化したい場合の手順です。 例として、次のような複数ドメインを扱うケースを想定します:
- miyada.home
- boki.home
- www.miyada.home
このような場合、証明書に SAN(Subject Alternative Name) を設定する必要があります。 SAN に登録したすべてのドメイン名で HTTPS アクセスが可能になります。
B-1. SAN 設定ファイルを作成
複数ドメインを扱うための SAN 設定ファイルを作成します。
nano ~/localCA/san-multi.cnf
以下を入力します:
[ req ]
default_bits = 2048
distinguished_name = req_distinguished_name
req_extensions = SAN
prompt = no
[ req_distinguished_name ]
CN = miyada.home
[ SAN ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = miyada.home
DNS.2 = boki.home
DNS.3 = www.miyada.home
DNS.1 / DNS.2 / DNS.3 に、HTTPS 化したいすべてのドメイン名を記述します。
B-2. SAN 付き CSR を作成
複数ドメイン用の CSR を作成します。
openssl req -new \
-key ~/localCA/miyada.home.key \
-out ~/localCA/multi.csr \
-config ~/localCA/san-multi.cnf
B-3. SAN 付き証明書を署名
ローカル CA を使って証明書を署名します。
openssl x509 -req \
-in ~/localCA/multi.csr \
-CA ~/localCA/ca.crt -CAkey ~/localCA/ca.key \
-CAcreateserial \
-out ~/localCA/multi.crt \
-days 365 -sha256 \
-extfile ~/localCA/san-multi.cnf -extensions SAN
これで multi.crt(複数ドメイン対応証明書)が完成しました。
B-4. Apache の VirtualHost をドメインごとに作成
複数ドメインを扱う場合、VirtualHost は ドメインごとに作成します。 ただし、証明書は 1 枚(multi.crt)で OK です。
<VirtualHost *:443>
ServerName miyada.home
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /home/ユーザー名/localCA/multi.crt
SSLCertificateKeyFile /home/ユーザー名/localCA/miyada.home.key
</VirtualHost>
<VirtualHost *:443>
ServerName boki.home
DocumentRoot /var/www/html/boki
SSLEngine on
SSLCertificateFile /home/ユーザー名/localCA/multi.crt
SSLCertificateKeyFile /home/ユーザー名/localCA/miyada.home.key
</VirtualHost>
multi.crt は SAN に複数ドメインが登録されているため、 どの VirtualHost でも同じ証明書を使用できます。
B-5. Apache を再起動
sudo systemctl reload apache2
これで https://miyada.home と https://boki.home の両方に HTTPS でアクセスできるようになります。
C. 単一ドメイン → 複数ドメインへ拡張する場合
最初は miyada.home だけを HTTPS 化 していたが、 後から boki.home や www.miyada.home も HTTPS 化したくなった ― というケースは非常によくあります。
この場合、最初からやり直す必要はありません。 SAN を追加した新しい証明書を作り直すだけ で対応できます。
※ Apache の VirtualHost は最小限の修正で済みます。
C-1. なぜ単一ドメイン証明書では複数ドメインに対応できないのか?
単一ドメイン証明書(例:miyada.home.crt)は、 CN = miyada.home のみを対象としています。
現在のブラウザは CN ではなく SAN(Subject Alternative Name) を参照するため、 SAN に登録されていないドメイン名では次のエラーが発生します:
NET::ERR_CERT_COMMON_NAME_INVALID
つまり、boki.home や www.miyada.home は SAN に追加しない限り HTTPS 化できません。
C-2. SAN 設定ファイルを作成(複数ドメイン用)
新しく SAN 設定ファイルを作成します。
nano ~/localCA/san-multi.cnf
以下を入力します:
[ req ]
default_bits = 2048
distinguished_name = req_distinguished_name
req_extensions = SAN
prompt = no
[ req_distinguished_name ]
CN = miyada.home
[ SAN ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = miyada.home
DNS.2 = boki.home
DNS.3 = www.miyada.home
追加したいドメイン名をすべて DNS.X として記述します。
C-3. SAN 付き CSR を作り直す
既存の秘密鍵(miyada.home.key)はそのまま使えます。
openssl req -new \
-key ~/localCA/miyada.home.key \
-out ~/localCA/multi.csr \
-config ~/localCA/san-multi.cnf
C-4. 新しい複数ドメイン証明書を署名
ローカル CA を使って署名します。
openssl x509 -req \
-in ~/localCA/multi.csr \
-CA ~/localCA/ca.crt -CAkey ~/localCA/ca.key \
-CAcreateserial \
-out ~/localCA/multi.crt \
-days 365 -sha256 \
-extfile ~/localCA/san-multi.cnf -extensions SAN
これで multi.crt(複数ドメイン対応証明書)が完成しました。
C-5. Apache の VirtualHost を修正
単一ドメインの VirtualHost を複数ドメイン対応に変更します。 証明書は multi.crt を使用します。
<VirtualHost *:443>
ServerName miyada.home
ServerAlias www.miyada.home boki.home
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /home/ユーザー名/localCA/multi.crt
SSLCertificateKeyFile /home/ユーザー名/localCA/miyada.home.key
</VirtualHost>
ServerAlias に追加したドメイン名を列挙するだけで OK です。
C-6. Apache を再起動して確認
sudo systemctl reload apache2
これで次のすべての URL が HTTPS でアクセス可能になります:
- https://miyada.home
- https://www.miyada.home
- https://boki.home
鍵マークが表示されれば成功です。
7. よくあるエラーと対処法
① NET::ERR_CERT_AUTHORITY_INVALID
→ ブラウザに CA(ca.crt)が登録されていません。
② NET::ERR_CERT_COMMON_NAME_INVALID
→ SAN にアクセスしたいドメイン名が含まれていません。
③ 403 Forbidden
→ DocumentRoot の権限不足。
④ サイトが表示されない
→ VirtualHost(miyada-ssl.conf / boki-ssl.conf)が有効化されていません。
⑤ SAN の設定が反映されない
→ 証明書署名時に -extfile san-multi.cnf を指定していない可能性があります。
8. まとめ
このページでは、ローカル CA を使って Apache2 を HTTPS 化する方法を、 単一ドメイン / 複数ドメイン / 移行ケース の 3 つに分けて解説しました。
■ A. 単一ドメイン(miyada.home)
- ローカル CA(ca.crt / ca.key)を作成
- miyada.home 用の秘密鍵・CSR を作成
- SAN 不要で証明書を署名
- 443番 VirtualHost を作成
- ブラウザに CA を登録
■ B. 複数ドメイン(miyada.home / boki.home / www)
- SAN 設定ファイル(san-multi.cnf)を作成
- SAN 付き CSR を作成
- multi.crt を署名
- VirtualHost をドメインごとに作成
■ C. 単一 → 複数へ拡張
- 既存の秘密鍵はそのまま使用
- SAN を追加した CSR を作り直す
- multi.crt を再署名
- VirtualHost に ServerAlias を追加
これでローカル環境でも実際の Web サイトと同じように HTTPS で安全に開発・検証 ができるようになります。
※ ローカル CA を使った HTTPS 化は、学校・自宅・研究環境などの クローズドネットワークで安全に利用できます。
更新履歴
- 2026年06月13日:単一 / 複数 / 移行ケースの 3 章構成に全面リライト。
- 2026年03月26日:複数ドメイン対応(boki.home)の手順を追加。
- 2026年02月11日:初版公開。