グローバルIPアドレス1つで複数のSSLサイトを立ち上げてみた


技術担当のナマイです。
本日はLinuxサーバ1台(グローバルIPアドレス1つ)で複数のSSLサイトを構築してみたいと思います。

■実現方式

1IP複数サイトの実現方式として、Apacheには「名前ベース・バーチャルホスト」という機能がありますので、これを使います。

詳しくは、以下をご参照ください。
http://httpd.apache.org/docs/current/ja/vhosts/name-based.html

■SSL証明書はどうしよう?

SSLサイトなので当然SSL証明書を用意しなければならないですが、選択肢としては以下の3パタンがありそうです。

A) ワイルドカード証明書を利用
サブドメインが共通の、複数サイトを立ち上げる場合に、1つの証明書でカバーできる。
例えば、
aaa.example.com
bbb.example.com

B) マルチドメイン証明書を利用
ドメインが全く異なる、複数サイトを立ち上げる場合でも、1つの証明書でカバーできる。

C) シングルドメイン証明書を必要サイト数+Apache SNI機能を利用
サイトの数だけ証明書を発行し、設定する。
しかしそれだけだと、HTTPヘッダは暗号化されてしまいバーチャルホスト機能が有効にならないので、それを回避するために用意されているApache SNI機能を利用する。
※ただし、サイトにアクセスするブラウザがSNI対応している必要があり、ちょっと古いものは未対応だったりするので、注意が必要。

取り扱うドメインやサイトの数によって変わってくるかと思いますが、ざっくり料金的にはC) < A) < B) の順で、構築したいサイトに合っていればC) がお得です。

今回は以前のブログ記事でもご紹介させていただきましたジェイサート様のSSL証明書を利用して、「A) ワイルドカード証明書」を検証してみたいと思います。
ジェイサート様では上記全ての証明書を取り扱われています。
参考:http://www.jcert.co.jp/support/faq_detail03.html#faq03-5

■構築手順

今回、使用した環境は以下の通りです。
・サーバOS:CentOS6.6
・HTTPD:Apache/2.2.15
・立ち上げるサイト:以下2つ
– site1.testsite.cloudhosting.biglobe.ne.jp
– site2.testsite.cloudhosting.biglobe.ne.jp
※今回のために用意したドメインであり、実際には存在しません。

・クライアントOS:Windows7
・クライアントブラウザ:IE10

概要としては以下の流れになります。

1) サーバ作成・設定(Apacheインストール/ポート開放)
2) 証明書発行のためのCSR作成
3) 証明書発行(※)
4) ルート証明書・中間証明書のダウンロード
5) サーバにSSL証明書設置&Apacheバーチャルホスト設定
6) クライアントPCにルート証明書インポート
7) 動作確認

(※)今回発行する証明書ですが、ジェイサート様ではサーバ動作確認用にテスト証明書を無償で発行してもらえるサービスがありますので、これを利用します。

流れを図にしてみました。(ごちゃごちゃしてしまっていますが、ご容赦ください・・・)
ssl1

では、以降で実際の手順を追ってみていきたいと思います。

1)  サーバ作成・設定(Apacheインストール/ポート開放)

まず最初にコントロールパネルよりCentOS6のサーバを作成します。
サーバが作成されましたら、sshでログイン後にApacheインストール/ポート開放をしておきます。実施したコマンドは以下の通り。

Apacheインストール

# yum install httpd

mod_sslインストール

# yum install mod_ssl

Apache起動

# service httpd start

ポート開放(HTTPSアクセスできるようにするために443を開放)

# vi /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT

を追記

iptables再起動

# service iptables restart

 

2) 証明書発行のためのCSR作成

続いて、CSRの作成をします。
手順については、ジェイサート様のサイトにドキュメントがありますので、こちらをご参考にしていただければと思います。
http://www.jcert.co.jp/support/pdf/CSR_apache2x_mod.pdf

今回実施したコマンドは以下の通りです。

# cd /etc/httpd/conf
# openssl req -new -newkey rsa:2048 -nodes -keyout ssl.key -out ssl.csr

CSR情報を色々と入力していきます。
今回はワイルドカード証明書なので、Common Nameには以下を指定します。

Common Name (eg, your name or your server's hostname) []:*.ssltest.cloudhosting.biglobe.ne.jp

これで、サーバに秘密鍵(ssl.key)とCSR(ssl.csr)が出力されます。
CSRについては、中身をエディタで開いてコピーしておきます。

 3) 証明書発行

では、作成したCSRをもとに証明書の発行をします。

https://www.jcert.co.jp/
よりユーザ登録実施し、ログイン後のJStoreにてテスト証明書を発行します。

テスト証明書についての注意事項の記載がありますので、ご一読いただくのが良いです。
http://www.jcert.co.jp/support/pdf/testroot_install.pdf

詳しい手順はジェイサート様のドキュメントに記載があります。
https://www.jcert.co.jp/procedure/pdf/manual.pdf

今回実施した際の画面キャプチャを貼っておきます。

テスト証明書の選択では、ワイルドカード、SHA-2を選択します。

2015-03-11_112403

続いて、先ほど作成したCSRのテキストを画面に貼り付けます。
※一部、伏字にしてます。

2015-03-11_112537

 

「次へ」と進んでいき、必要情報を入力し、手続きが完了しますと、JStoreよりメールでテスト証明書発行の通知がきます。

発行された証明書ファイルは別途サーバに設置します。

4) ルート証明書・中間証明書のダウンロード

続いて、テスト証明書のルート証明書、及び、中間証明書をダウンロードします。

以下のURLに、ファイルをダウンロードするためのリンクがあります。
http://www.jcert.co.jp/support/certificate.html

今回は、SHA-2を選択しました。またHTTPDはApacheを利用していますので、以下をダウンロードします。
– テスト証明書ルート:SHA-2用
– テスト中間証明書:SHA-2用、bundle.crt

5) サーバにSSL証明書設置&Apacheバーチャルホスト設定

取得した証明書をサーバに設置します。

SSLの秘密鍵・CSRファイルを置いているディレクトリ(/etc/httpd/conf)に、証明書(メールで発行された.crtファイル)・中間証明書(nt_sfig2_bundle.crt)をそれぞれアップロードします。

続いて、SSL・バーチャルホストの設定をします。

まず下準備として、2つのサイトのDocumentRoot用のディレクトリ、index.htmlを用意しておきます。

# mkdir /var/www/html/site1
# mkdir /var/www/html/site2
# vi /var/www/html/site1/index.html

「site1」と書いて保存しておきます。

# vi /var/www/html/site2/index.html

「site2」と書いて保存しておきます。

次にSSL設定です。

# vi /etc/httpd/conf.d/ssl.conf

以下の通りに編集します。

NameVirtualHost *:443
<VirtualHost *:443>
ServerName site1.ssltest.cloudhosting.biglobe.ne.jp:443
DocumentRoot /var/www/html/site1
:
SSLCertificateFile /etc/httpd/conf/ssltest.cloudhosting.biglobe.ne.jp.crt
SSLCertificateKeyFile /etc/httpd/conf/ssl.key
SSLCertificateChainFile /etc/httpd/conf/nt_sfig2_bundle.crt
:
</VirtualHost>
<VirtualHost *:443>
ServerName site2.ssltest.cloudhosting.biglobe.ne.jp:443
DocumentRoot /var/www/html/site2
:
SSLCertificateFile /etc/httpd/conf/ssltest.cloudhosting.biglobe.ne.jp.crt
SSLCertificateKeyFile /etc/httpd/conf/ssl.key
SSLCertificateChainFile /etc/httpd/conf/nt_sfig2_bundle.crt
:
</VirtualHost>

SSLCertificateFileは発行された証明書のパス
SSLCertificateKeyFileは秘密鍵のパス
SSLCertificateChainFileはダウンロードしてきた中間証明書のパス
です。

編集完了しましたら、Apacheを再起動します。

6) クライアントPCにルート証明書インポート

もうちょっとで終わります。
次に、クライアントPCにダウンロードしてきたルート証明書を設定します。

ここの手順は通常は不要ですが、今回はテスト証明書として発行していますので、PCにはデフォルトでルート証明書がインポートされておらず、実施しないとSSLのエラーが出てしまいます。

手順としては、こちらもジェイサート様のサイトに記載がありますので、こちらをご参照ください。
http://www.jcert.co.jp/support/pdf/testroot_install.pdf

7) 動作確認

最後に動作確認です。

※本来は、利用するドメインを取得し、DNSに登録する必要がありますが、今回は検証ということなので、クライアントPCのhostsファイルをいじってアクセスしています。

ブラウザより、以下のURLにアクセスします。
https://site1.ssltest.cloudhosting.biglobe.ne.jp/

2015-03-11_151907

https://site2.ssltest.cloudhosting.biglobe.ne.jp/

2015-03-11_151926

無事、エラーが出ることなくアクセスすることが出来ました。

※使用する環境・ブラウザによってはSSLエラーが出る可能性があります。テスト証明書ではなく、本番用に証明書をご購入いただいていれば、エラーは出ません。

以上で手順は終わりです。
複数サイトをクラウドサーバ上で構築される際にご参考にしていただけたらと思います。

なお、クラウドアプリストアにて、今回ご紹介しましたジェイサート様のSSL証明書が月額でご購入いただけますので、是非そちらもご利用ください。

お問い合わせ

BIGLOBEクラウドホスティングに関するお問い合わせは、BIGLOBE法人コンタクトセンターへお電話ください。

phone
otoiawase

カテゴリー: 技術情報 タグ: , , パーマリンク