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.comとexample.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 []:[email protected]
次に、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構成には次の行がありますが、サーバーのデフォルトの証明書として証明書を指定します。
<VirtualHost _default_:443>
以下の構成には、デフォルトの証明書への参照がありません。 これが鍵です。
全体として、デフォルトの構成ファイルは、仮想ホストに追加できるさまざまな便利なディレクティブと追加の構成オプションを提供します。 ただし、次の情報は、サーバーが1つのIPアドレスに複数のSSL証明書を設定するために必要なすべてのものを提供します。
<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName example.com DocumentRoot /var/www </VirtualHost> <IfModule mod_ssl.c> <VirtualHost *: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 </VirtualHost> </IfModule>
これらの構成ファイルには、カスタマイズする必要のある行がいくつかあります。
- ServerAdmin :これは単にあなたのウェブマスターのメールアドレスです
- ServerName :これはあなたのドメイン名です。 wwwを付加せずに書き込むようにしてください。
- DocumentRoot :これはサイト情報を保持するディレクトリです。 現在、apacheのデフォルトディレクトリを指しています。 おそらく、2つの異なる仮想ホストに対して異なるサーバールートがあります。
- SSLCertificateFile :このディレクティブは、証明書ファイルの場所を指します。 各サイトの証明書は、チュートリアルの前半で作成したディレクトリに保存されています。
- SSLCertificateKeyFile :このディレクティブは、証明書キーの場所を指します。 各サイトの証明書キーは、チュートリアルの前半で作成したディレクトリに保存されています。
両方のドメインの構成をセットアップします。 個別のSSL証明書が両方のサーバーで機能するようになるまでには、まだまだステップがあります。
ステップ5—ports.confファイルを編集します
1つのVPSで複数の証明書が機能することを確認するために必要な最後の手順は、サーバーにポート443でリッスンするように指示することです。 太線をapacheポート設定ファイルに追加します。
sudo nano /etc/apache2/ports.conf
NameVirtualHost *:80 NameVirtualHost *:443 Listen 80 <IfModule 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 </IfModule> <IfModule mod_gnutls.c> Listen 443 </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)。