はじめに
こんにちは。ネットワークエンジニアの「だいまる」です。
前回の記事に続き、「自宅のサーバを使ったブログ環境の構築シリーズ」についてまとめていきたいと思います。
前回は、独自ドメインを取得し、AWSのDNSサービスである「Route53」に紐づける方法をまとめました。
今回は、ブログ構築の基本である「SSL/TLS化」についてまとめたいと思います。
2024/02/01よりAWSのPublic IPに関しても料金が発生するようになったので、個人でネット回線契約した方がいいんじゃないか?と思い始めています。
物価上昇とか色んな背景があって、年々コストが高騰するのが痛い・・・
そもそもSSL/TLS化とは?
そもそもSSL/TLSとは、「データの暗号化」を行うプロトコルになります。
日常生活でもわかる例は、ブラウザ(Chrome/Safari/Firefox)のURL部分に鍵マークがあればSSL/TLS化(HTTPS)されており、安全性が高いと言えます。
一方、「HTTP(鍵マークがついていない)」は暗号化されてないため、パスワードなどが読み取られる可能性があります。
「HTTPS」と「HTTP」の違いをより直感的に理解したい人は、手紙と郵便屋をまず思い浮かべてください。
その上で、手紙がそのまま郵便屋さんに渡され、中身が見える状態で届くのが「HTTP」、封筒がされ中身が見えない状態で届くのが「HTTPS」となります。
HTTP/HTTPS周りの理解は、教材で理解した方が早いかもしれません。
また、TCP/IPマスタリングのSSL編もあるのでそちらを購入された方が詳細を理解することができるかもしれませんね。
SSL/TLS化に必須となる証明書の取得
今回、証明書取得に利用したサービスは、「Let’s Encrypt」です。
このサービスは、世界のウェブサイト全てをHTTPS化する目的で運営されており、世界の名だたる企業がスポンサーとなっており、無料で証明書を発行できます。
Let’s Encryptを利用した証明書発行には、「Certbot」と呼ばれるソフトウェアのインストールが必要となります。
このCertbotもOS(オープンソース)のため無料で利用でき、Let’s Encryptを利用したHTTPS通信のために作られたソフトウェアとなります。
Certbotをインストールしてみよう
はじめに、Certbotというソフトウェアをインストールします。
・gitによるインストール:git clone https://github.com/certbot/certbot
・yumによるインストール:sudo yum install certbot
・aptによるインストール:sudo apt install certbot
上記コマンドを実行すれば、Certbotのインストール完了となります。
インストールしたら証明書発行してみよう!
Certbotのインストール後、以下コマンドにより証明書を発行します。
証明書発行コマンド:sudo certbot --nginx
上記コマンドで証明書発行を実施した後は、nginx.confに以下の設定が設定されるので確認してみてください。
(今回投入される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
}
ただ、これだけでは設定が完了とは言えません。
今回、SSL/TLS化を導入したのはAWS(EC2)を利用したリバースプロキシサーバのため、ウェブサーバ間はHTTPのままのため、矛盾が生じてしまいます。
その矛盾を問題ない状態にするためには、リバースプロキシの設定を変更する必要があります。
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;
上記の設定を追加することで、HTTPS通信をHTTP通信に変更しWebサーバとの通信を実現することができます。
もちろん、設定追加後はNginxの再起動が必要となります。
最後にWordpressでのSSL/TLS化の適用
Certbotのインストール、証明書の発行、Configファイルの変更完了後、Wordpress上でSSL/TLSの設定変更を行います。
プラグインのインストール
WordPressのプラグインの1つである「Velvet Blues Update URLs」を検索し、インストールします。
インストール後、メニューバーの「ツール」から「Update URLs」をクリックし、変更前URLと変更後のURLの入力後、Update URLs NOWをクリックし反映します。
この対応により、HTTPとなっていたブログ内のURLが全てHTTPSに変更されます。
一般設定の変更
メニューバーの「一般設定」をクリックし、「Wordpressアドレス」と「サイトアドレス」の2つの「http」を「https」に変更したら完了です。
最後に
ここまで自宅にWordpress環境を構築した際に実施したことをまとめてきました。
次回以降はトラブルシューティングを記載し、それ以降は自宅にサーバを購入し、ESXiの導入からウェブサイトの立ち上げまでをまとめたいと思います。
-
ブログ・サーバ構築
【WordPress・ブログ構築】初めてのブログ構築はレンタルサーバ・自前環境どっちがお得?(AWS・ラズパイ編)
-
ブログ・サーバ構築
【自作でGoogle Drive?】NextcloudのCodeサーバ(ビルトインCode)で苦戦した話
-
WordPress
【WordPress・ブログ構築】リバースプロキシ環境をSSL/TLS化してみた
-
WordPress
【WordPress・ブログ構築】AWS(Route53)を利用し、独自ドメインと紐づけてみた
-
ブログ・サーバ構築
【ESXiインストール】CPU Mismatch・No Network Adapter
-
ブログ・サーバ構築
【WordPress・ブログ構築】AWS(EC2)をリバースプロキシとして構築してみた(NGINX/OPENVPN構築)