HTTPS 化(応用編)

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

1. HTTPS とは?

HTTPS は、HTTP に SSL/TLS 暗号化 を追加した通信方式です。 通信内容が暗号化されるため、パスワードや個人情報が盗み見られるリスクを防げます。

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

2. ローカル CA(認証局)を作成

まずはローカル環境で証明書を発行できるように、 ローカル CA(認証局) を作成します。

2-1. CA 用フォルダを作成

mkdir -p ~/localCA

2-2. CA の秘密鍵を作成

openssl genrsa -out ~/localCA/ca.key 2048

2-3. CA 証明書を作成(10年有効)

openssl req -x509 -new -nodes \
 -key ~/localCA/ca.key \
 -sha256 -days 3650 \
 -out ~/localCA/ca.crt

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

上記コマンドを実行すると、OpenSSL がいくつか質問をしてきます。 どこを入力すべきか、どこは空欄で良いか を以下にまとめました。

項目 入力例 必須? 説明
Country Name JP 必須 国コード(日本は JP)
State or Province 長野県 必須 都道府県名
Locality Name 伊那市 必須 市区町村名
Organization Name Ina High School / Home Server / YourName 任意(推奨) 組織名・学校名・自宅名・自分の名前など、 あなたの環境に合わせて自由に設定します。
Organizational Unit (空欄) 不要 Enter でOK
Common Name(CN) Home Local CA / School Local CA / MyTestCA 必須 この CA を識別するための名前を入力します。
例はあくまで例であり、あなた自身の環境に合わせて自由に決めてください。
Email Address (空欄) 不要 Enter でOK

特に Common Name(CN) は CA の正式名称になります。 「Home Local CA」「School Local CA」など、 あなたが後で見て分かりやすい名前を付けてください。

※ CA の Common Name(CN)は、サーバー証明書の CN と一致させる必要はありません。 CA は “証明書を発行する側” の名前なので、自由に決めて構いません。

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(秘密鍵)が完成します。

4. Apache の 443番 VirtualHost を作成

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

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

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

使いたいドメイン名 設定ファイル名 ServerName SAN
miyada.home miyada-ssl.conf miyada.home DNS:miyada.home
server.local server-ssl.conf server.local DNS:server.local
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/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>

※ 「ユーザー名」には Linux のログインユーザー名を入力します。 例:/home/taro/localCA/miyada.home.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 が使用)
  • san.cnf … SAN 設定ファイル

このうち、受講生 PC に配布してブラウザに登録するのは ca.crt だけです。 サーバー証明書(miyada.home.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 になっていない。

③ 403 Forbidden

→ DocumentRoot の権限不足。

④ サイトが表示されない

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

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

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

8. まとめ

このページでは、OpenSSL を使ってローカル CA を作成し、 miyada.home を HTTPS 化する方法を解説しました。

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

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

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