Apacheで複数ドメインにSSL/TLSを設定する方法|SAN証明書の活用ガイド

複数のドメインを一台のApacheサーバーでSSL/TLS対応させることは、コスト削減と管理の効率化に大きく貢献します。特に複数のウェブサイトを運営する企業や個人にとって、各ドメインごとに個別の証明書を取得・管理するのは手間がかかります。ここで役立つのがSAN(Subject Alternative Name)証明書です。

SAN証明書は、一つの証明書で複数のドメインやサブドメインをカバーできるため、シンプルな管理が可能になります。本記事では、SAN証明書を使ってApacheサーバーで複数ドメインにSSL/TLSを設定する具体的な方法を解説します。

基本的なSSLの仕組みから始め、証明書の取得、Apacheの設定方法、さらには自動更新まで、初心者でも実践しやすいように手順を詳細に説明していきます。これにより、セキュリティを向上させつつ、効率的に複数サイトを運用する環境が整えられます。

目次

ApacheでSSL/TLSを設定する基本概要


ApacheでSSL/TLSを設定することは、ウェブサイトのセキュリティを確保する上で重要です。SSL/TLSは、クライアントとサーバー間の通信を暗号化し、データの盗聴や改ざんを防ぎます。これにより、ユーザーは安心してウェブサイトを利用でき、SEOの評価向上やブラウザ警告の回避にもつながります。

ApacheでSSL/TLSを有効にする基本的な流れは以下の通りです:

  1. SSLモジュールのインストールと有効化
  2. SSL証明書の取得
  3. Apache設定ファイルの編集(バーチャルホスト設定)
  4. 証明書の適用とApacheの再起動

SSLモジュールをインストールするには、以下のコマンドを使用します:

sudo a2enmod ssl
sudo systemctl restart apache2


これにより、ApacheでSSL/TLSが利用可能になります。

本記事では、単一のドメインではなく、複数ドメインにSSL/TLSを設定する方法に焦点を当てます。特にSAN証明書を活用することで、複数のドメインやサブドメインを一つの証明書で管理する手法を解説します。

SSL/TLS証明書の種類とSAN証明書の概要

SSL/TLS証明書にはいくつかの種類があり、それぞれ適用範囲や利用目的が異なります。複数ドメインに対応する場合、特に重要なのがSAN証明書です。ここでは代表的な証明書の種類と、SAN証明書の特徴を解説します。

1. 単一ドメイン証明書


概要:1つのドメイン(例:www.example.com)にのみ適用される証明書です。
用途:小規模なウェブサイトや個別のサービスに最適です。
メリット:コストが低く、管理が容易。
デメリット:ドメインごとに証明書を取得する必要があるため、複数ドメインを運用する場合は煩雑になります。

2. ワイルドカード証明書


概要:特定のドメイン配下の全サブドメイン(例:*.example.com)をカバーします。
用途:サブドメインが多いサイトに適しています。
メリット:サブドメインが追加されても証明書を更新する必要がありません。
デメリット:メインドメイン以外の別ドメインは対象外となります。

3. SAN(Subject Alternative Name)証明書


概要:複数のドメインやサブドメインを1つの証明書でカバーします。
用途:複数のウェブサイトを1台のサーバーで運用する際に役立ちます。
メリット:管理が簡単でコスト削減にもつながります。
デメリット:証明書の更新時にすべてのドメインを再確認する必要があります。

SAN証明書の具体例


以下のように、1枚の証明書で複数のドメインを登録できます。

  • example.com
  • www.example.com
  • sub.example.com
  • example.net

これにより、複数ドメインを1台のApacheサーバーでSSL/TLSに対応させることが可能になります。次のセクションでは、SAN証明書の取得手順について詳しく解説します。

SAN証明書の取得方法と手順

SAN証明書を取得するには、認証局(CA)から証明書を発行してもらう必要があります。Let’s Encryptなどの無料のCAを利用する方法と、有料のCAを利用する方法があります。それぞれの手順を見ていきましょう。

1. 無料のSAN証明書を取得する(Let’s Encrypt)


Let’s Encryptは無料でSSL/TLS証明書を発行できる人気のサービスです。Certbotを使用することで、SAN証明書も簡単に取得可能です。

手順

  1. Certbotのインストール
sudo apt update
sudo apt install certbot python3-certbot-apache
  1. 証明書の取得(複数ドメイン指定)
sudo certbot --apache -d example.com -d www.example.com -d example.net


このコマンドで、example.comとwww.example.com、example.netのSAN証明書が発行されます。

  1. 自動更新設定
sudo systemctl enable certbot.timer
sudo certbot renew --dry-run


これにより、証明書の自動更新が設定されます。

2. 有料のSAN証明書を取得する


ビジネス用途やEV証明書(Extended Validation)が必要な場合は、有料のCA(DigiCert、GlobalSignなど)からSAN証明書を取得します。

手順

  1. CAのサイトで「SAN証明書」を選択
  2. 複数のドメインを入力して申請
  3. ドメイン所有権の確認(メールやDNS認証など)
  4. 証明書をダウンロードし、Apacheサーバーに設置

注意点

  • 有料証明書はセキュリティやサポートが充実しており、EV証明書の場合は信頼性がさらに高まります。
  • Let’s Encryptは無料ですが、最大で100個のドメインまで対応可能です。

次のセクションでは、取得したSAN証明書をApacheで導入する具体的な手順を解説します。

ApacheでSAN証明書を導入する手順

SAN証明書を取得した後は、Apacheに適用して複数のドメインでSSL/TLS通信を有効にする必要があります。このセクションでは、Apacheの設定ファイルを編集してSAN証明書を導入する方法を解説します。

1. 証明書ファイルの配置


CAから発行された証明書ファイルを以下のディレクトリに配置します。

/etc/ssl/certs/  
/etc/ssl/private/  


一般的に以下の3つのファイルが提供されます。

  • 証明書ファイル(example.com.crt)
  • 中間証明書(chain.pem)
  • 秘密鍵(example.com.key)

2. Apacheのバーチャルホスト設定


バーチャルホストを設定し、SAN証明書を適用します。Apacheの設定ファイルを開いて編集します。

sudo nano /etc/apache2/sites-available/example.conf

バーチャルホスト設定例

<VirtualHost *:443>
    ServerName example.com
    ServerAlias www.example.com example.net

    DocumentRoot /var/www/html

    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/example.com.crt
    SSLCertificateKeyFile /etc/ssl/private/example.com.key
    SSLCertificateChainFile /etc/ssl/certs/chain.pem

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
  • ServerName:メインのドメイン名を指定
  • ServerAlias:SAN証明書に含まれる他のドメインを指定
  • SSLCertificateFile:SSL証明書を指定
  • SSLCertificateKeyFile:秘密鍵を指定
  • SSLCertificateChainFile:中間証明書を指定

3. 設定の有効化


編集が完了したら、設定を有効化します。

sudo a2ensite example.conf
sudo systemctl reload apache2

4. 動作確認


以下のコマンドでApacheの設定に問題がないか確認します。

sudo apachectl configtest


エラーがなければ、Apacheを再起動します。

sudo systemctl restart apache2

これで、ApacheにSAN証明書が適用され、複数のドメインでSSL/TLSが有効になります。次のセクションでは、バーチャルホストを使った複数ドメインの詳細な設定方法について解説します。

バーチャルホストを使った複数ドメインの設定方法

Apacheではバーチャルホスト(Virtual Host)を使用することで、1台のサーバーで複数のドメインやウェブサイトを運用できます。これにより、各ドメインごとに異なるウェブコンテンツやSSL証明書を適用することが可能になります。

ここでは、SAN証明書を使用した複数ドメインのSSL/TLS設定に必要なバーチャルホストの基本的な構成方法を解説します。

1. バーチャルホスト設定の基本


バーチャルホストは、Apacheの設定ファイル内でServerNameServerAliasディレクティブを用いて定義します。各バーチャルホストごとにSSL設定を行うことで、ドメインごとに異なる証明書を適用できます。

2. 設定ファイルの作成


各ドメイン用にバーチャルホストの設定ファイルを作成します。

sudo nano /etc/apache2/sites-available/example.com.conf

基本的な構成例

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example
    Redirect permanent / https://example.com/
</VirtualHost>

<VirtualHost *:443>
    ServerName example.com
    ServerAlias www.example.com example.net
    DocumentRoot /var/www/example

    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/example.com.crt
    SSLCertificateKeyFile /etc/ssl/private/example.com.key
    SSLCertificateChainFile /etc/ssl/certs/chain.pem

    ErrorLog ${APACHE_LOG_DIR}/example-error.log
    CustomLog ${APACHE_LOG_DIR}/example-access.log combined
</VirtualHost>
  • ポート80のVirtualHostでHTTPからHTTPSへリダイレクトを設定
  • ポート443のVirtualHostでSSLを有効化し、証明書を適用
  • ServerAliasでサブドメインや追加ドメインを定義

3. 設定の有効化と確認


作成した設定ファイルを有効にし、Apacheを再起動します。

sudo a2ensite example.com.conf
sudo systemctl reload apache2

4. 複数のバーチャルホスト設定例


さらにドメインを追加する場合は、以下のように設定します。

<VirtualHost *:443>
    ServerName example.net
    ServerAlias www.example.net
    DocumentRoot /var/www/example

    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/example.com.crt
    SSLCertificateKeyFile /etc/ssl/private/example.com.key
    SSLCertificateChainFile /etc/ssl/certs/chain.pem
</VirtualHost>

これにより、example.com、example.net、およびwww.example.comのドメインすべてが1つの証明書(SAN証明書)で保護されます。

次は、具体的なバーチャルホスト設定例を紹介します。

SAN証明書を使ったバーチャルホストの具体例

SAN証明書を活用したバーチャルホスト設定の具体例を示します。これにより、1つのApacheサーバーで複数のドメインを効率的にSSL/TLSで保護できます。ここではexample.comexample.netwww.example.comの3つのドメインを1つのSAN証明書で設定する例を紹介します。

1. バーチャルホスト設定例


Apacheの設定ファイルを編集し、SAN証明書を使って複数のドメインを1つのバーチャルホストで管理します。

sudo nano /etc/apache2/sites-available/example.conf

バーチャルホスト設定(example.conf)

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com example.net
    DocumentRoot /var/www/example

    # HTTPからHTTPSへのリダイレクト
    Redirect permanent / https://example.com/
</VirtualHost>

<VirtualHost *:443>
    ServerName example.com
    ServerAlias www.example.com example.net
    DocumentRoot /var/www/example

    # SSL設定
    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/example.com.crt
    SSLCertificateKeyFile /etc/ssl/private/example.com.key
    SSLCertificateChainFile /etc/ssl/certs/chain.pem

    # ログ設定
    ErrorLog ${APACHE_LOG_DIR}/example-error.log
    CustomLog ${APACHE_LOG_DIR}/example-access.log combined
</VirtualHost>

2. 設定ファイルの有効化

sudo a2ensite example.conf


設定を反映させるためにApacheをリロードします。

sudo systemctl reload apache2

3. 動作確認


ブラウザでhttps://example.comhttps://www.example.comhttps://example.netにアクセスして、SSL証明書が適用されていることを確認します。

以下のコマンドで証明書の詳細を確認できます。

openssl s_client -connect example.com:443

4. 複数バーチャルホストを分ける場合


異なるドキュメントルートを持つ複数のドメインを設定したい場合は、バーチャルホストを分けて設定します。

<VirtualHost *:443>
    ServerName example.com
    DocumentRoot /var/www/example

    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/example.com.crt
    SSLCertificateKeyFile /etc/ssl/private/example.com.key
    SSLCertificateChainFile /etc/ssl/certs/chain.pem
</VirtualHost>

<VirtualHost *:443>
    ServerName example.net
    DocumentRoot /var/www/example_net

    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/example.com.crt
    SSLCertificateKeyFile /etc/ssl/private/example.com.key
    SSLCertificateChainFile /etc/ssl/certs/chain.pem
</VirtualHost>


これにより、異なるウェブサイトを同じ証明書で保護しつつ、個別のコンテンツを提供できます。

次は、証明書の更新と自動化方法(certbotの活用)について解説します。

証明書更新と自動化の方法(certbotの活用)

SSL/TLS証明書は有効期限があり、期限切れになるとサイトが「安全でない」と表示され、ユーザーからの信頼を失う可能性があります。特にLet’s Encryptの証明書は90日間の有効期限があるため、自動更新の設定が必須です。ここでは、Certbotを使用して証明書を自動的に更新する方法を解説します。

1. Certbotのインストール


CertbotはLet’s Encrypt証明書の発行・更新を簡単に行えるツールです。以下のコマンドでCertbotをインストールします。

sudo apt update
sudo apt install certbot python3-certbot-apache

2. Certbotで証明書を取得(SAN対応)


複数のドメインを指定して、SAN証明書を取得します。

sudo certbot --apache -d example.com -d www.example.com -d example.net
  • -dオプションで、対象ドメインをすべて列挙します。
  • このコマンドを実行すると、Apacheのバーチャルホスト設定も自動的に編集されます。

3. 自動更新の設定


Certbotは自動で証明書を更新できますが、定期的に更新が行われているか確認することが重要です。
Certbotの自動更新サービスは、systemdタイマーを使用して管理されています。

sudo systemctl enable certbot.timer
sudo systemctl start certbot.timer


サービスの状態を確認するには、次のコマンドを使用します。

sudo systemctl status certbot.timer

4. 自動更新のテスト


証明書が正常に自動更新されるかを確認するため、ドライラン(テスト実行)を行います。

sudo certbot renew --dry-run


エラーがなければ、自動更新が正しく機能しています。

5. crontabを使用した自動更新(手動設定)


systemdが使用できない環境では、cronを使って証明書の自動更新をスケジュールします。

sudo crontab -e


以下の行を追加します。

0 3 * * 1 certbot renew --quiet
  • これは毎週月曜日の午前3時に証明書を更新する設定です。
  • –quietオプションにより、エラーがない限り通知は行われません。

6. Apacheの自動リロード設定


証明書が更新された後、自動的にApacheを再起動して新しい証明書を反映させます。

0 3 * * 1 certbot renew --quiet && systemctl reload apache2

7. 証明書更新の確認


証明書の有効期限を確認するには、次のコマンドを使用します。

sudo openssl x509 -in /etc/ssl/certs/example.com.crt -text -noout | grep "Not After"


これにより、証明書の有効期限が表示されます。

Certbotを活用することで、証明書の期限切れを防ぎ、複数ドメインのSSL/TLS管理を効率的に行えます。次は、SSL/TLSの動作確認とトラブルシューティングについて解説します。

SSL/TLSの動作確認とトラブルシューティング

ApacheでSAN証明書を設定した後は、SSL/TLSが正しく機能しているか確認することが重要です。設定ミスや証明書の問題があると、ブラウザで「接続が安全でない」と表示されることがあります。このセクションでは、SSL/TLSの動作確認方法と、エラーが発生した際のトラブルシューティング方法を解説します。

1. SSL/TLSの動作確認

1-1. Webブラウザでの確認


ブラウザで対象のドメインにアクセスし、アドレスバーの鍵アイコンをクリックして証明書の詳細を確認します。

  • 証明書は有効か
  • 正しいドメイン名が記載されているか
  • 証明書の有効期限が切れていないか

1-2. SSL Labsでの確認


Qualys SSL Labsの「SSL Server Test」を利用して、SSL/TLS設定の診断を行います。
https://www.ssllabs.com/ssltest/
ドメインを入力するだけで、証明書の適用状況や暗号化強度、脆弱性がないかを確認できます。

1-3. opensslコマンドで確認


コマンドラインで証明書の詳細を確認する場合は、以下のコマンドを使用します。

openssl s_client -connect example.com:443


証明書が正しく適用されている場合、証明書チェーンが表示されます。

2. トラブルシューティング

2-1. Apacheの設定ミス


Apacheの設定に誤りがある場合、サービスが起動しないことがあります。

sudo apachectl configtest


「Syntax OK」と表示されれば、設定ファイルに問題はありません。エラーが表示された場合は、エラーメッセージを確認し、修正します。

2-2. 証明書のパスが間違っている


Apache設定ファイル内の証明書ファイルのパスが正しいか確認します。

SSLCertificateFile /etc/ssl/certs/example.com.crt
SSLCertificateKeyFile /etc/ssl/private/example.com.key
SSLCertificateChainFile /etc/ssl/certs/chain.pem


ファイルが存在しない場合は、証明書を再取得する必要があります。

2-3. 中間証明書の適用ミス


「証明書は有効だが完全な証明書チェーンが存在しない」と表示される場合は、中間証明書が正しく設定されていない可能性があります。

SSLCertificateChainFile /etc/ssl/certs/chain.pem


中間証明書が欠落している場合は、CAから提供されたファイルを再度適用してください。

2-4. ポートの開放確認


ファイアウォールやセキュリティグループでポート443が開放されているか確認します。

sudo ufw allow 'Apache Full'

2-5. 証明書の期限切れ


証明書の有効期限が切れている場合は、以下のコマンドで確認します。

sudo openssl x509 -in /etc/ssl/certs/example.com.crt -text -noout | grep "Not After"


期限が切れている場合は、Certbotで証明書を更新します。

sudo certbot renew

3. Apacheの再起動


設定を修正した後は、Apacheを再起動して反映させます。

sudo systemctl restart apache2

以上の手順でSSL/TLSの設定を確認し、トラブルが発生した場合でも迅速に対応できます。
次のセクションでは、本記事のまとめを行います。

まとめ

本記事では、Apacheで複数のドメインにSSL/TLSを設定する方法について、SAN証明書を活用した具体的な手順を解説しました。

Apacheの基本的なSSL設定から、SAN証明書の取得、バーチャルホストの設定、そしてCertbotを使用した証明書の自動更新まで、実践的な内容を網羅しています。これにより、1台のサーバーで複数のドメインを効率的に管理し、安全なウェブ環境を構築することが可能になります。

SSL/TLSの正しい設定と運用は、サイト訪問者の信頼を確保し、検索エンジンの評価向上にもつながります。今回学んだ手順を活かして、セキュアなウェブサイト運営を実現してください。

コメント

コメントする

目次