はじめに
みなさん、こんにちは。某通信キャリアでネットワークエンジニアとして働いている「だいまる」です。
本日は、リバースプロキシとWordpressを搭載しているラズパイのSSL化について、説明していきたいと思います。
その前に、前回までの記事についてリストとして載せておきますね。
(前回までの振り返り)
1:Wordpressを構築した構成と経緯
2:1ドメインで複数のサイトを立ち上げる方法
3:独自ドメインの取得方法とAWSへの適用方法
SSL/TLS化とは?
「そもそもSSL/TLS化って何するの?」 や 「SSL/TLS化って何?」 と思われた方もいるかと思います。
SSL/TLS化というのは、一言でいうのであれば、「データの暗号化」です。
みなさんがネットを介して様々なサイトにアクセスする時にhttpなのかhttpsなのかで暗号化の有無が変わってきます。
どう判断するかというと、サイトのURL左側に鍵マークがある場合は「https」であり、暗号化されております。
逆に鍵マークがない場合は、「http」であり、暗号化はされていません。
この違いがどの程度大きいのかというと、アマゾンなどのECサイトで決済のためにクレジットカード情報やセキュリティコードを入力した場合、情報がとられる可能性が天と地の差程生まれてきます。
具体的なイメージでいくと、手紙で例えるとわかりやすいです。
これが手紙ではなく、重要な情報であった場合、どうなるでしょう?
これがhttpとhttpsの違いになります。
SSL/TLSの仕組み(エンジニア・勉強したい方向け)
次に、SSL/TLSの仕組みについては、こちらの記事(後日投稿予定)を読んでいただけると幸いです。
証明書の取得方法
ここからは、今回の構成で実際に取り組んだSSLの証明書取得方法について説明します。
今回利用したのは、「Let's Encrypt」です。
この「Let's Encrypt」とは、世界のウェブサイトを全てHTTPS化することを目的として作られた機関で、今では世界の名だたる企業がスポンサーとなり運営されております。
このサービスを利用した理由は、ただひとつ!、「無料」だからです。
前置きはこのぐらいにしておいて、ここからは、実際にやったことを書いていきます。
1:Certbotのインストール
まずはじめに、Certbotというソフトウェアをインストールします。
・gitによるインストール:git clone https://github.com/certbot/certbot
・yumによるインストール:sudo yum install certbot-nginx
2:証明書の発行
上記でCertbotをインストールしたら以下コマンドで証明書を発行します。
・証明書発行コマンド:sudo certbot --nginx
上記コマンドで証明書発行を行い、nginx.confに以下の設定が入った後は、リバースプロキシにある設定を行います。
(自動で入る設定)
listen 443 ssl default_server; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/***/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/****/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
server {
if ($host = ****) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name ****;
return 404; # managed by Certbot
}
上記の設定だけでは、ユーザからEC2(Nginx)までのHTTPS化はできてますが、リバースプロキシとして利用しているNginxからラズパイまでの通信はHTTPとなり、矛盾が生じるため、アクセス不可やJavascriptやCSSの読込が不可となります。
その解決のためには、以下の対応が必要となります。
3:リバースプロキシへの適用方法
SSL/TLS証明書の取得後、アクセス不可やJavascript、CSSの読込が不可となった場合、/etc/nginx/nginx.confに以下の設定が必要となります。
・Server配下に以下設定を追加
add_header Content-Security-Policy upgrade-insecure-requests;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
proxy_max_temp_file_size 0;
この設定をserver配下に追加すると無事にJavascript、CSSが読み込まれるようになります。
理由については、後日投稿予定の記事で説明させていただきます。
WordpressのSSL/TLSの設定方法
最後に、WordpressのSSL/TLSの設定方法について説明します。
やることは、全部で3つです。
1:プラグインのインストール
「プラグイン」のボタンをクリック
キーワード欄に「Velvet Blues Update URLs」と検索し、それをインストールします。
インストール後、メニューバーの「ツール」をクリックし、「Update URLs」をクリックします。
上記の画像が出てきたら、「Old URL」に「http://」と入力し、「New URL」に「https://」と入力します。
そして、Step2のチェック欄にチェックをつけ、「Update URLs Now」をクリックします。
2:一般設定の変更
メニューバーの「一般設定」をクリックし、一般設定の下の我慢が出てきたら、「Wordpressアドレス」と「サイトアドレス」の2つの「http」を「https」に変更したら完了です。
まとめ
ここまで環境構築を行い、サイト周りの対応は完了しました。
あとは、サーバの信頼性・可用性の向上、性能の向上、セキュリティの強化を実施する必要があります。
仮にアクセス数が増えた場合、この環境では膨大なアクセス数を捌くことは難しくなるため、自宅にオンプレミスのサーバを購入し、環境を移すことも考えております。