開発者ドキュメント

Ubuntu12.04でApacheを使用して1つのIPに複数のSSL証明書を設定する方法

ステータス:非推奨

この記事では、サポートされなくなったバージョンのUbuntuについて説明します。 現在Ubuntu12.04を実行しているサーバーを運用している場合は、サポートされているバージョンのUbuntuにアップグレードまたは移行することを強くお勧めします。

理由: Ubuntu 12.04は2017年4月28日に保守終了(EOL)に達し、セキュリティパッチまたはアップデートを受信しなくなりました。 このガイドはもう維持されていません。

代わりに参照してください:
このガイドは参考として役立つかもしれませんが、他のUbuntuリリースでは機能しない可能性があります。 可能な場合は、使用しているUbuntuのバージョン用に作成されたガイドを使用することを強くお勧めします。 ページ上部の検索機能を使用して、より新しいバージョンを見つけることができます。

Server Name Indication(SNI)を使用して、1つのIPアドレスで複数のSSL証明書をホストできます。

SNIについて

単一の仮想プライベートサーバーで複数のサイトをホストすることは、仮想ホストを使用する場合の課題ではありませんが、従来、サイトごとに個別のSSL証明書を提供するには、個別のIPアドレスが必要でした。 このプロセスは最近、サーバー名表示(SNI)を使用することで簡素化されました。これは、要求されたサーバー名と一致する証明書をサイト訪問者に送信します。

ノート:

SNIは、Webサーバーから複数のSSLサイトにサービスを提供するためにのみ使用でき、メールサーバーなどの他のデーモンではまったく機能しない可能性があります。 また、証明書エラーが発生する可能性のある古いWebブラウザの割合もわずかです。 Wikipedia には、このTLS拡張をサポートするソフトウェアとサポートしないソフトウェアの更新されたリストがあります。

設定

SNIは、証明書を提供するためにドメイン名を登録する必要があります。

このチュートリアルの手順では、ユーザーがroot権限を持っている必要があります。 これを設定する方法は、手順3と4の初期サーバー設定チュートリアルで確認できます。

ApacheはすでにVPSにインストールされ、実行されているはずです。 そうでない場合は、次のコマンドでダウンロードできます。

sudo apt-get install apache2

ステップ1-SSL証明書を作成する

このチュートリアルでは、両方の証明書が自己署名されます。 example.comexample.orgの両方をホストするサーバーの作成に取り組んでいます。

SSL証明書には、証明書自体と公開鍵の2つの主要部分があります。 関連するすべてのファイルに簡単にアクセスできるようにするには、各仮想ホストのSSL証明書用のディレクトリを作成する必要があります。

mkdir -p /etc/apache2/ssl/example.com
mkdir -p /etc/apache2/ssl/example.org

ステップ2—SSLモジュールをアクティブ化する

次のステップは、ドロップレットでSSLを有効にすることです。

sudo a2enmod ssl

Apacheを再起動してフォローアップします。

sudo service apache2 restart

ステップ3—自己署名SSL証明書を作成する

新しい証明書をリクエストするときは、365を希望の日数に変更することで、証明書が有効である期間を指定できます。 現状では、この証明書は1年後に期限切れになります。

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/example.com/apache.key –out /etc/apache2/ssl/example.com/apache.crt

このコマンドを使用すると、自己署名SSL証明書とそれを保護するサーバーキーの両方を作成し、両方を新しいディレクトリに配置します。

このコマンドは、入力する必要のあるフィールドのリストを表示するようにターミナルに指示します。

最も重要な行は「共通名」です。 ここに公式ドメイン名を入力するか、まだ持っていない場合はサイトのIPアドレスを入力します。

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:New York
Locality Name (eg, city) []:NYC
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Awesome Inc
Organizational Unit Name (eg, section) []:Dept of Merriment
Common Name (e.g. server FQDN or YOUR name) []:example.com                  
Email Address []:webmaster@awesomeinc.com

次に、2番目の( example.org )ドメインに対して同じ手順を実行します。

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/example.org/apache.key -out /etc/apache2/ssl/example.org/apache.crt

ステップ4—仮想ホストを作成する

証明書を保存して準備ができたら、仮想ホストファイルに情報を追加できます。

必須ではありませんが、2つの仮想ホストファイルを作成して、仮想ホスト情報を別々のファイルに保存し、デフォルトの仮想ホストファイルから構成をコピーすることができます。

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

先に進み、各ファイルを開いて、以下の構成で貼り付けます。 この構成は、 / etc / apache2 / sites-available /defaultにあるデフォルトの仮想サーバー構成ファイルと/etc/apache2にあるデフォルトのSSL構成の2つの別個の構成ファイルの簡略版です。 / sites-available /default-ssl

さらに、この構成には、複数のSSL証明書を容易にする重要な変更が含まれています。 デフォルトのSSL構成には次の行がありますが、サーバーのデフォルトの証明書として証明書を指定します。

&ltVirtualHost _default_:443>

以下の構成には、デフォルトの証明書への参照がありません。 これが鍵です。

全体として、デフォルトの構成ファイルは、仮想ホストに追加できるさまざまな便利なディレクティブと追加の構成オプションを提供します。 ただし、次の情報は、サーバーが1つのIPアドレスに複数のSSL証明書を設定するために必要なすべてのものを提供します。

&ltVirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName example.com
        DocumentRoot /var/www

&lt/VirtualHost>


&ltIfModule mod_ssl.c>
&ltVirtualHost *:443>

        ServerAdmin webmaster@localhost
        ServerName example.com
        DocumentRoot /var/www

        #   SSL Engine Switch:
        #   Enable/Disable SSL for this virtual host.
        SSLEngine on

        #   A self-signed (snakeoil) certificate can be created by installing
        #   the ssl-cert package. See
        #   /usr/share/doc/apache2.2-common/README.Debian.gz for more info.
        #   If both key and certificate are stored in the same file, only the
        #   SSLCertificateFile directive is needed.
        SSLCertificateFile /etc/apache2/ssl/example.com/apache.crt
        SSLCertificateKeyFile /etc/apache2/ssl/example.com/apache.key
&lt/VirtualHost>

&lt/IfModule>

これらの構成ファイルには、カスタマイズする必要のある行がいくつかあります。

両方のドメインの構成をセットアップします。 個別のSSL証明書が両方のサーバーで機能するようになるまでには、まだまだステップがあります。

ステップ5—ports.confファイルを編集します

1つのVPSで複数の証明書が機能することを確認するために必要な最後の手順は、サーバーにポート443でリッスンするように指示することです。 太線をapacheポート設定ファイルに追加します。

sudo nano /etc/apache2/ports.conf 
NameVirtualHost *:80
NameVirtualHost *:443

Listen 80

&ltIfModule mod_ssl.c>
    # If you add NameVirtualHost *:443 here, you will also have to change
    # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
    # to 
    # Server Name Indication for SSL named virtual hosts is currently not
    # supported by MSIE on Windows XP.
    Listen 443
&lt/IfModule>

&ltIfModule mod_gnutls.c>
    Listen 443
&lt/IfModule>

ステップ6—仮想ホストをアクティブ化する

最後のステップは、ホストをアクティブ化することです。 Apacheを使用すると、ホストのアクティブ化と非アクティブ化が非常に簡単になります。

sudo a2ensite example.com
sudo a2ensite example.org

(次のコマンドを使用して、仮想ホストを非アクティブ化できます。 sudo a2dissite example.com)

すべての仮想ホストを有効にして、Apacheを再起動します。

sudo service apache2 restart

これで、それぞれ独自のドメイン名とSSL証明書を持つ両方のサイトにアクセスできるようになります。

ドメインのみを入力することで、署名されたSSL証明書がある場合とない場合の両方でサイトを表示できます(例: example.comまたはexample.org)またはhttpsプレフィックスが付いたドメイン(https://example.comまたはhttps://example.org)。

EtelSverdlov著
モバイルバージョンを終了