HTTPS 化(応用編)

このページでは、Apache2 を HTTPS(443番) に対応させるための手順を解説します。 OpenSSL を使って ローカル CA(認証局) を作成し、 miyada.home 用のサーバー証明書を発行する方法を紹介します。

【更新情報】:複数ドメイン(boki.home)対応の手順(3.5章)を追加。更新履歴を掲載。

3. サーバー証明書(miyada.home)を発行

3-1. 秘密鍵を作成

openssl genrsa -out ~/localCA/miyada.home.key 2048

3-2. CSR(証明書署名要求)を作成

※ ここで入力する Common Name(CN) が サーバー証明書の基準名になります。 例:miyada.home を使う場合は CN も miyada.home

openssl req -new \
 -key ~/localCA/miyada.home.key \
 -out ~/localCA/miyada.home.csr

■ CSR 作成時に聞かれる項目と入力例(初心者向け)

CSR 作成時も OpenSSL がいくつか質問をしてきます。 Common Name(CN)だけが重要 で、その他の項目は空欄でも問題ありません。

項目 入力例 必須? 説明
Country Name JP 任意 国コード(日本は JP)
State or Province 長野県 任意 都道府県名(空欄でも可)
Locality Name 伊那市 任意 市区町村名(空欄でも可)
Organization Name Home Server / School / YourName 任意 組織名・学校名・自宅名・自分の名前など、 あなたの環境に合わせて自由に設定します。
Organizational Unit (空欄) 不要 Enter でOK
Common Name(CN) miyada.home 必須 サーバ証明書の名前を入力します。 ただし、実際にブラウザが確認するのは SAN(後述) です。
Email Address (空欄) 不要 Enter でOK

※ 現在のブラウザは CN ではなく SAN(Subject Alternative Name) を参照します。 実際にアクセスさせたいドメイン名は、この後作成する san.cnf に記述します。

3-3. SAN(SubjectAltName)設定ファイルを作成

nano ~/localCA/san.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 = www.miyada.home

必要に応じて DNS.2 は削除しても構いません。 SAN に書いたドメイン名が、ブラウザでアクセスする URL と一致している必要があります。

3-4. サーバー証明書を発行(CA で署名)

※ ここで指定するファイル名(miyada.home)は、CSR(3-2)で設定した CN と一致させてください。

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 \
 -extfile ~/localCA/san.cnf -extensions SAN

これで miyada.home.crt(サーバー証明書)と miyada.home.key(秘密鍵)が完成します。

3.5 複数ドメインを HTTPS 化する場合

VirtualHost のページで miyada.home / boki.home のように 複数ドメインを設定した場合、HTTPS 化でも同様に複数ドメインへ対応する必要があります。 ローカル CA を使用する場合は、証明書の SAN(Subject Alternative Name) に すべてのドメインを登録することで、1 枚の証明書で複数ドメインを HTTPS 化できます。

① SAN に複数ドメインを追加する

次のように 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

この設定により、miyada.home と boki.home の両方を 1 枚の証明書で扱えるようになります。

② 証明書を再生成する

openssl req -new -key ~/localCA/miyada.home.key \
 -out ~/localCA/multi.csr -config ~/localCA/san-multi.cnf

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(複数ドメイン対応証明書)が完成します。

③ Apache の VirtualHost をドメインごとに作成

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

証明書は 1 枚(multi.crt)で OK です。 VirtualHost はドメインごとに作成します。

④ Apache を再起動

sudo systemctl reload apache2

これで https://miyada.homehttps://boki.home の両方に HTTPS でアクセスできるようになります。

4. Apache の 443番 VirtualHost を作成

HTTPS 用の VirtualHost(443番)を作成します。

■ ドメイン名と設定ファイル名の対応表(初心者向け)

下の表は、使いたいドメイン名に応じて、どの設定ファイル名を使うべきかを示しています。 miyada はユーザー名ではなく、ドメイン名です。

使いたいドメイン名 設定ファイル名 ServerName SAN
miyada.home miyada-ssl.conf miyada.home DNS:miyada.home
boki.home boki-ssl.conf boki.home DNS:boki.home
test.lab test-ssl.conf test.lab DNS:test.lab

つまり、ドメイン名に合わせて設定ファイル名を決めるだけで、 ユーザー名とは一切関係ありません。

sudo nano /etc/apache2/sites-available/miyada-ssl.conf

以下を入力:

ServerName は、CSR(3-2)で設定した Common Name(CN)と一致させてください。

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerName miyada.home
    DocumentRoot /var/www/html

    SSLEngine on
    SSLCertificateFile /home/ユーザー名/localCA/multi.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>

※ 「ユーザー名」には Linux のログインユーザー名を入力します。 例:/home/taro/localCA/multi.crt

4-1. SSL モジュールとサイトを有効化

sudo a2enmod ssl
sudo a2ensite miyada-ssl.conf
sudo systemctl reload apache2

4-2. なぜブラウザに CA を登録する必要があるのか(HTTPS の仕組み)

HTTPS は「暗号化された通信」を提供するだけでなく、 その通信相手が本物であることを証明する仕組み を持っています。 この仕組みを支えているのが 認証局(CA) です。

ブラウザはあらかじめ「信頼できる認証局(CA)」の一覧を持っており、 その CA が発行した証明書だけを安全と判断 します。

今回作成したローカル CA(localCA)は、 あくまで ローカル環境専用の CA であり、 世界中のブラウザが知っているわけではありません。

そのためブラウザは次のように判断します: 「この証明書は知らない CA が発行している。安全かどうか分からない。」

これが、HTTPS にアクセスしたときに 毎回警告が表示される理由 です。

ローカル環境で HTTPS を正しく利用するためには、 受講生 PC のブラウザに localCA の証明書(ca.crt)を登録し、 “この CA は信頼してよい” と教える必要があります。

一度 CA を登録すれば、以後は警告が出ず、 完全な HTTPS 通信 として扱われます。

4-3. 作成された CA と証明書の保存場所について

ここまでの手順で作成したローカル CA(ca.crt / ca.key)や、 miyada.home 用の証明書(miyada.home.crt / miyada.home.key)は、 すべて次のフォルダに保存されています。

/home/ユーザー名/localCA

フォルダの中身は次のとおりです:

  • ca.key … ローカル CA の秘密鍵(絶対に配布しない)
  • ca.crt … ローカル CA の証明書(受講生 PC に配布する)
  • miyada.home.key … サーバー秘密鍵(Apache が使用)
  • miyada.home.csr … 証明書署名要求
  • miyada.home.crt … サーバー証明書(Apache が使用)
  • multi.crt … 複数ドメイン対応証明書
  • san.cnf / san-multi.cnf … SAN 設定ファイル

このうち、受講生 PC に配布してブラウザに登録するのは ca.crt だけです。 サーバー証明書(miyada.home.crt / multi.crt)や秘密鍵(miyada.home.key)は サーバー側でのみ使用します。

5. ブラウザにローカル CA を登録

HTTPS を正しく利用するためには、ブラウザに ca.crt を信頼済み証明書として登録する必要があります。 これはローカル CA(localCA)を “信頼できる認証局” として扱うための作業です。

Edge / Chrome 共通:最短で確実な CA 登録方法(推奨)

Edge や Chrome の UI は頻繁に変更されるため、 ブラウザの設定画面から証明書を登録しようとすると迷いやすくなります。 そこで、最も確実で長期的に使える方法として、 Windows の証明書ストアに直接 ca.crt を登録する手順 を紹介します。

  1. Windows 上で ca.crt をダブルクリックする
  2. 「証明書のインストール」をクリック
  3. 「ローカル コンピューター」を選択(権限を求められたら「はい」)
  4. 「証明書をすべて次のストアに配置する」を選択
  5. 参照から「信頼されたルート証明機関」を選ぶ
  6. 完了 → OK

この方法で登録すると、Edge / Chrome / Windows 全体が localCA(ca.crt)を信頼するようになります。 ブラウザの UI が変わっても、この方法は将来にわたって有効です。

※ Edge / Chrome は Windows の証明書ストアを参照します。 そのため、Windows 側に CA を登録すればブラウザ側の設定は不要です。

※ 登録後、https://miyada.home にアクセスして 鍵マークが表示されれば成功です。

Firefox の場合

  1. 設定 → プライバシーとセキュリティ
  2. 証明書 → 証明書を表示
  3. 「認証局をインポート」から ca.crt を選択
  4. 「この CA が Web サイトを識別することを信頼する」にチェック

※ CA の登録は受講生 PC それぞれで 1 回だけ行えば OK です。

6. 動作確認(https://miyada.home)

ブラウザで次の URL にアクセスします:

https://miyada.home

鍵マークが表示され、警告が出なければ HTTPS 化は成功です。

※ 鍵マークが表示されない場合は、ブラウザを再起動すると改善することがあります。

7. よくあるエラーと対処法

① NET::ERR_CERT_AUTHORITY_INVALID

→ ブラウザに CA(ca.crt)を登録していない。

② NET::ERR_CERT_COMMON_NAME_INVALID

→ CN または SAN が miyada.home / boki.home と一致していない。

③ 403 Forbidden

→ DocumentRoot の権限不足。

④ サイトが表示されない

→ miyada-ssl.conf / boki-ssl.conf を有効化していない。

⑤ SAN の設定が反映されない

→ 証明書発行時に -extfile san-multi.cnf を指定していない可能性があります。

8. まとめ

このページでは、OpenSSL を使ってローカル CA を作成し、 miyada.home を HTTPS 化する方法を解説しました。 また、3.5章では boki.home を含む複数ドメインを 1 枚の証明書で HTTPS 化する方法も紹介しました。

  • ローカル CA(ca.crt / ca.key)を作成
  • miyada.home 用の秘密鍵・CSR を作成
  • SAN(Subject Alternative Name)を設定
  • CA でサーバー証明書を署名
  • 複数ドメイン(miyada.home / boki.home)を SAN に登録
  • 443番 VirtualHost をドメインごとに作成
  • ブラウザに CA を登録して信頼させる

これでローカル環境でも実際の Web サイトと同じように HTTPS で安全に開発・検証 ができるようになります。

※ ローカル CA を使った HTTPS 化は、学校・自宅・研究環境などの クローズドネットワークで安全に利用できます。

更新履歴

  • 2026年03月26日:複数ドメイン対応(boki.home)の手順(3.5章)を追加。更新情報・更新履歴を掲載。
  • 2026年02月11日:初版公開。