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 の証明書ストアに登録するのが最も確実です。

  1. Windows で ca.crt をダブルクリック
  2. 「証明書のインストール」
  3. 「ローカル コンピューター」
  4. 「信頼されたルート証明機関」へ登録

※ 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.homehttps://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日:初版公開。