はじめに
こんにちは。ネットワークエンジニアの「だいまる」です。
前回は、独自ドメインとDNSサービスの紐付けについてまとめました。
ブログ構築がある程度整ってきたところで、最後はGoogleアドセンスの承認は欠かせない「SSL/TLS化」についてまとめたいと思います。
そもそもSSL/TLS化とは?
ブログ構築・運営でよく目にするSSL/TLSとは何なのか?
それは「データの暗号化」を行うプロトコルになります。
SSL/TLS化の判別方法は、ブラウザ(Chrome/Safari/Firefox)URLに鍵マークがあるかどうかです。
鍵マークがあれば、SSL/TLS化(HTTPS)されており、安全性が高いと言えます。
一方、鍵マークがないHTTPはデータのやりとり暗号化されていないため、パスワードなどが読み取られる可能性があります。
と言われても「HTTPS」と「HTTP」で何が違うのか?
それは手紙が届く過程を想像してもらえれば、理解しやすいと思います。
通常、手紙を郵便局に出す場合、封筒の中に手紙を入れ郵送すると思います。
この状態が「HTTPS」なのです。
なぜなら、手紙の中身を簡単には見れないからです。(封筒を開けるという動作が必要)
一方、封筒に入れずにそのままの状態で郵送しているのが「HTTP」になります。
この場合、悪意がなくても手紙の中身が読まれる可能性があります。
HTTPS対応だけでなくセキュリティ向上はブログやホームページを運用する上で非常に重要です。
特にWordPressの場合、誰でもログインできる可能性があります。
実際にログイン画面に遷移できるサイトは多いです。
ホームページを作るだけで終わってる人が多いんだろうね・・・
そのため、極力セキュリティを高めるための施策を導入した方が良いと思います。
SSL/TLSを理解した後は、実際にやってみよう
Step1:証明書発行サービスの調査
SSL/TLS化の対応で一番最初にやることは「証明書の取得」です。
証明書取得のためには、「自分で発行」、「証明書発行サービスの利用」の2パターンがあります。
今回は、「証明書発行サービス」の1つである「Let’s Encrypt」を利用しました。
このサービスは、世界の全ウェブサイトをHTTPS化する目的で有名企業もスポンサーとなり、運営しています。
サービス利用はもちろん「無料」です。
このサービスを利用した理由は、「自分での発行より信頼性が高い点と費用がかからない点」です。
「お名前.com」さんでもSSL証明書は発行できますが、1年でかなり高額な費用がかかってしまいます。
Step2:最初にやることは「Certbot」のインストール
Let’s Encryptを利用した証明書を発行するために、最初にやることは「Certbot」のインストールです。
「Certbot」とは、「オープンソースのソフトウェアであり、Let’s Encryptの証明書発行に必要なツール」になります。
インストール方法は、サーバOSによって異なります。(以下がコマンド例です)
・gitによるインストール:git clone https://github.com/certbot/certbot
・yumによるインストール:sudo yum install certbot
・aptによるインストール:sudo apt install certbot
上記コマンドのいずれかを実行し無事に完了すれば、Certbotのインストール完了となります。
Step3:証明書の発行
Certbotのインストール後、以下コマンドにより証明書を発行します。
証明書発行コマンド:sudo certbot --nginx
上記コマンドによる証明書発行の実施後は、nginx.confにSSL/TLSの設定が反映されるので確認してみましょう。
以下のエラーログが出力された場合は「python3-certbot-nginx」のインストールが必要
Saving debug log to /var/log/letsencrypt/letsencrypt.log
The requested nginx plugin does not appear to be installed
(今回投入されるConfig)
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
}
証明書の発行とnginx.confの設定反映を終えただけでは、SSL/TLS化完了とは言えません。
なぜなら、リバースプロキシ環境では、インターネットとリバースプロキシ間のHTTPSとリバースプロキシとWebサーバ間のHTTPの矛盾が生じるためです。
Step4ではその対処方法を説明していきます。
Step4:SSL/TLS化に伴うリバースプロキシの設定
リバースプロキシへの設定を実施しない場合、セッション間で矛盾が生じ、アクセス不可やJavascriptやCSSの読込が不可となる場合があります。
そのため、「/etc/nginx/nginx.conf」に以下の設定を追加します。
### location配下に追記する ###
server{
~~~~~
location /{
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;
}
}
上記の設定を追加することで、HTTPS通信をHTTP通信に変更しWebサーバとの通信を実現することができます。
もちろん、設定追加後はNginxの再起動が必要となります。
サーバの設定を終えた後は、Wordpressの設定変更も必要!
Certbotのインストール、証明書の発行、Configファイルの変更完了後、Wordpress上でSSL/TLSの設定変更を行います。
Step1:プラグインによる一括変更
WordPressのプラグインの1つである「Velvet Blues Update URLs」を検索し、インストールします。
インストール後、メニューバーの「ツール」から「Update URLs」をクリックし、変更前URLと変更後のURLの入力後、Update URLs NOWをクリックし反映します。
この対応により、HTTPとなっていたブログ内のURLが全てHTTPSに変更されます。
Step2:一般設定の変更
メニューバーの「一般設定」をクリックし、「Wordpressアドレス」と「サイトアドレス」の2つの「http」を「https」に変更したら完了です。
最後に
ここまで自宅にWordpress環境を構築した際に実施したことをまとめてきました。
次回以降はトラブルシューティングを記載し、それ以降は自宅にサーバを購入し、ESXiの導入からウェブサイトの立ち上げまでをまとめたいと思います。