(1) Apacheのリバースプロキシをhttps化する手順について
(1-0) STEP0:前提事項の確認
(1-1) STEP1:mod_sslモジュールの導入
(1-2) STEP2:証明書と鍵の作成
(1-3) STEP3:仮想ホストの設定
(1-4) STEP4:ファイアウォール設定
(1-5) STEP5:Apacheの再起動・疎通チェック
(1) Apacheのリバースプロキシをhttps化する手順について
本記事はApacheのリバースプロキシでhttpに加えてhttpsでもできるようにするための手順です。
(1-0) STEP0:前提事項の確認
前提としては、Webサイトやドメインの設定が一通り済んでおり「httpでのリバースプロキシ設定」の済んでいる前提で進めるため、もしまだ完了していない場合は先にそれらのステップを実施頂けたらと思います。
(前提事項)
①HTML、JSP/Servlet等でホームページを作成済み
(例:「http://[ホスト名]:[ポート番号]/[アプリ名]/[画面名].jsp」のURL形式で自身のサイトにアクセスできる)
②ウェルカムページの設定が完了している
(例:「http://[ホスト名]:[ポート番号]/[アプリ名]/」のURL形式で自身のサイトにアクセスできる)
③ドメインを取得してDNSサーバとの紐づけ済み
(例:「http://[ドメイン]:[ポート番号]/[アプリ名]/」のURL形式で自身のサイトにアクセスできる)
→https://rainbow-engine.com/register-apply-owndomain/
④Apacheのインストールが完了している
→https://rainbow-engine.com/install-apache-centos7/
⑤Apacheのリバースプロキシの設定が完了している
(例:「http://[ドメイン]/」のURL形式で自身のサイトにアクセスできる)
→https://rainbow-engine.com/apache-reverseproxy-howto/
そして本記事の対応により「https://[ドメイン]」でご自身のサイトにアクセス出来るようになります。
(1-1) STEP1:mod_sslモジュールの導入
「mod_ssl」はApache HTTPサーバのオプションモジュールで、OpenSSL(SSLやTLSの実装を含んだライブラリ)を使ってSSLやTLSを導入し、よりセキュアな通信を実現するための機能です。
「mod_ssl」のインストールは次のコマンドで行います。
(yumが使えない場合、例えばrpmベースのディストリビューション以外だと読み替え要)
$ sudo yum install mod_ssl
(図111)
(図112)
インストールできたら、チェックのために以下のコマンドを実行します。
httpd -M
結果として表示されるロードされたモジュールの中に「ssl_module」があるかどうか確認します。
ssl_module (shared)
(図113)
(1-2) STEP2:証明書と鍵の作成
次はSSLで使用する証明書と鍵を作成していきます。使うコマンドはopensslと呼ばれる、鍵や証明書を作る時に使うコマンドです。
(構文)
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /[鍵のパス(任意のパス)]/[鍵の名前].key -out /[証明書のパス(任意のパス)]/[証明書の名前].crt
(例)
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certificates/apache-selfsigned.crt
(図121)
コマンドを実行すると、証明書に必要な情報(組織名や国名など)を聞いてくるので、それぞれご自身の情報を入力します。
(図122)
各オプションの意味は以下の通りです。
(表)
オプション | 説明 |
openssl | OpenSSLの鍵や証明書等を作るために使うコマンドラインツールです。 |
req -x509 | このオプションにより「X.509」規格のCSR(証明書署名要求)を作成する事を意味します。 CSRとは公開鍵証明書の発行に際して、申込人⇒認証局に送られる情報の事です。X.509は公開鍵証明書の規格で、公開鍵がドメイン/ホストの所有者に属するかを検証するために広く使用されています。 |
-nodes | このオプションにより、OpenSSLに証明書のパスワード設定を省略するように指示します。証明書はApacheが自由に読めるようにする必要があり、パスワード認証が掛かっていると、その都度管理者が入力する手間が発生するため、それを避けるためのものです。 |
-day 365 | このオプションにより、証明書の有効期限を設定しています。365だと1年間有効となります。 |
-newkey rsa:2048 | 証明書とセットで鍵(証明書の署名に使う鍵)を作るためのオプションです。前もって鍵を作っていない場合は、このオプションを指定して同時に作ります。RSAは公開鍵の暗号化体系で、セキュアな通信において広く利用されています。 「rsa:」の後ろの2048は、RSA鍵を2048ビットの長さで作成する事を意味しています。 |
-keyout | 生成する秘密鍵の出力先パスを指定します。 |
-out | 生成する証明書の出力先パスを指定します。 |
(参考)
opensslと似たコマンドでkeytoolコマンドがありますが、両者の違いとして「openssl」は通常の形式(pem/cer/crt/pkcsなど)で証明書などを発行するコマンドですが、Javaでは鍵や証明書は「キーストア」に格納して利用する事が好まれるため、キーストアの操作を行う場合はkeytoolコマンドを使う事になります。
(1-3) STEP3:仮想ホストの設定
最後にApacheの仮想ホストを設定していきます。仮想ホストは同一サーバで複数のサイトを運営するために作られたApacheの機能です。
(1-3-1) ssl.confの確認
まず、以下のディレクトリに「ssl.conf」があるかをチェックします。
$ cd /etc/httpd/conf.d
もしあれば、そちらを編集しても良いですし、無い場合でもviエディタ等で新規に作成する事も可能です。
(図131)
(1-3-2) 定義の追記
元々ssl.confがあった場合・無い場合のいずれにおいても、最終的にssl.confに以下の定義が含まれるようにします。
LoadModule ssl_module modules/mod_ssl.so Listen 443 <VirtualHost *:443> <Proxy *> Order deny,allow Allow from all </Proxy> SSLEngine on SSLProxyEngine On SSLCertificateFile /[証明書パス]/[証明書名].crt SSLCertificateKeyFile /[鍵のパス]/[鍵の名前].key ProxyRequests Off ProxyPreserveHost On ProxyPass / [リダイレクト先URL] ProxyPassReverse / [リダイレクト先URL] </VirtualHost>
(図132)
(1-4) STEP4:ファイアウォール設定
ファイアウォールで8443ポートを開放します。OS毎に設定箇所は異なりますが、以下にCentOSの設定方法をご紹介します。
(1-5) STEP5:Apacheの再起動・疎通チェック
設定を反映するために、Apacheの再起動を行います。
(CentOS 6の場合)
$ sudo service httpd restart
(図141)
すると、次のように「https://[ドメイン名]で接続が可能となります。
(図142)