LoginSignup
22
15

More than 3 years have passed since last update.

【AWS】WordPress SSL化の備忘録

Last updated at Posted at 2020-07-17

はじめに

AWS×お名前.comでWordPressを作成しSSL化しようとしたが、ネット上の記事通りにはうまくいかなかった箇所が一部あったので、備忘録として残したい。

条件

・AWSでWordPressを構築(AWS linuxインスタンスに、Apacheウェブサーバーをインストールする。)
・お名前.comでドメイン取得

主な手順

1.Certificate ManagerにてSSL証明書を発行
2.お名前.comでCNAME設定
3.ロードバランサの設定
4.Route53の設定追加
5.ターゲットの登録
6.WordPressをhttps対応にさせる(WordPress&サーバーでの設定)
7.サイトのバックアップ
8.CSSおよびJavascriptファイルからのHTTP参照の有無の確認
9.HTTP→HTTPSへのリダイレクト設定
10.動作確認

方法

AWS×お名前.comで作成したサイトをSSL化
上記サイトを参考にはじめは進めた。

Certificate ManagerにてSSL証明書を発行

下記の画像のようにCertificate ManagerにてSSL証明書を発行することを目指す。
image.png

パブリック証明書のリクエストを選択。
スクリーンショット 2020-07-14 9.22.35.png
ドメイン名にお名前.comで追加したドメインを入力し、この証明書に別の名前を追加でアスタリスク (*) を使用して、ワイルドカード証明書も併せてリクエストする。
スクリーンショット 2020-07-07 22.47.49.png

スクリーンショット 2020-07-14 9.30.39.png

検証方法の選択で、DNSの検証を選択。
スクリーンショット 2020-07-14 9.35.03.png

適宜あとで見たときにもわかりやすいように、タグを設定する。
スクリーンショット 2020-07-14 9.36.54.png
内容を確認し、確定とリクエストを押す。
スクリーンショット 2020-07-14 9.38.20.png

リクエストを押したら続行ボタンを押し、証明書の画面に戻る。
ドメインの横の▶︎じるしをクリックすると名前・種類・値が出てくるので、値をコピーする。(※画像では状況が発行ずみ・検証状態が成功となっているが、本当はリクエストを出しただけだと検証保留中となっている。)
スクリーンショット 2020-07-14 9.44.17.png

お名前.comでCNAME設定

お名前.com Naviに行き、ご利用状況>ドメイン一覧をクリック。
スクリーンショット 2020-07-14 10.06.00.png
該当のドメインをクリック。
スクリーンショット 2020-07-14 10.07.47.png
ドメイン詳細>ドメイン機能一覧をクリック。
スクリーンショット 2020-07-14 10.09.06.png
ネームサーバー設定>DNS関連機能の設定をクリック。
スクリーンショット 2020-07-14 10.14.30.png
該当のドメインか確認し、次へをクリック。
スクリーンショット 2020-07-14 10.16.09.png
DNS設定>DNSレコード設定を利用するの設定するボタンを選択。
スクリーンショット 2020-07-14 10.18.44.png
A/AAAA/CNAME/MX/NS/TXT/SRV/DS/CAAレコードで下記の画像のようにホスト名にwwwを、VALUEに先ほどコピーした値を入力し、右の追加ボタンを押す。
スクリーンショット 2020-07-14 10.25.45.png
下にスクロールして、必要な場合ネームサーバー変更確認を設定して「確認画面へ進む」を押す。(私の場合はすでにネームサーバーを別に設定していたので、チェックしなかった。)
スクリーンショット 2020-07-14 10.30.21.png
内容を確認し、問題なければ設定するボタンを押す。
スクリーンショット 2020-07-14 10.32.05.png

これでCNAME設定完了。

証明書が発行されたことを確認

AWS Certificate Managerを開くと、発行ずみになっていることを確認。(場合によっては反映に時間がかかる可能性あり。)
スクリーンショット 2020-07-14 9.44.17.png

ロードバランサの設定

EC2>ロードバランサーをクリックし、ロードバランサーの作成を選択。(下記画像ではすでに作成されておりますが、そちらは気にしないでください。)
スクリーンショット 2020-07-15 10.37.33.png

「Application Load Balancer HTTP,HTTPS」の選択を行う。
スクリーンショット 2020-07-15 10.40.56.png
「名前」を適宜好きな名前で入力する。
スクリーンショット 2020-07-15 10.43.16.png
「リスナー」の追加を押して、「HTTPS」を選択する。
スクリーンショット 2020-07-15 10.46.17.png
アベイラビリティーゾーンで該当のVPCを選択し、アベイラビリティゾーンでチェックボックスを上から2つ選択し、セキュリティ設定の構成へ進む。
スクリーンショット 2020-07-15 10.55.32.png
発行した証明書が選択されているか確認をして、「次の手順:セキュリティグループの設定」を押す。
スクリーンショット 2020-07-15 10.59.18.png
「新しいセキュリティグループを作成する」を選んで、タイプで「HTTP」と「HTTPS」を選択し、「次の手順:ルーティングの設定」を押す。
スクリーンショット 2020-07-15 11.04.32.png
名前を適宜好きな名前で入力し、「次の手順:ターゲットの登録」を押す。
スクリーンショット 2020-07-15 11.09.24.png
該当のインスタンスを選択し、登録済みに追加を押す。
スクリーンショット 2020-07-15 11.12.09.png
登録済みになっているか確認し、「次の手順:確認」を押す。
スクリーンショット 2020-07-15 11.15.36.png
内容に問題ないか確認し、「作成」を押す。
スクリーンショット 2020-07-15 11.18.27.png
ロードバランサーが作成されたか確認する。
スクリーンショット 2020-07-15 10.37.33.png

Route53の設定追加

「ホストゾーン」を押す。
スクリーンショット 2020-07-16 17.51.15.png
該当のドメイン名をクリック。
スクリーンショット 2020-07-16 17.52.48.png
「レコードセットの作成」を押す。
スクリーンショット 2020-07-16 18.04.21.png

タイプはデフォルトの「AーIPv4アドレス」、エイリアスを「はい」、エイリアス名をELB Application Load Balancerの先ほど作成したものを指定し、作成を押す。(※私の場合Aレコードがすでに存在して新たに作れなかったため、左記のエイリアスとエイリアス名を該当のものに変更し、レコードセットを保存した。)
スクリーンショット 2020-07-16 18.11.58.png

503 Service Temporarily Unavailableエラーが発生...

ネット記事ではこれでSSL化が完成し、HTTPSでサイトの表示ができるとのことだったが、「503 Service Temporarily Unavailable」エラーが発生し、サイトが表示できなかった。
そのためググってみると【初心者だよ その2】 AWSで無料SSLをやってみた
こんな記事を発見。
つまりロードバランサーの配下で起動するインスタンスを指定できてないため、ターゲットの登録を行うということ。
EC2>ロードバランシング>ターゲットグループを選択し、該当のターゲットグループを選択する。
スクリーンショット 2020-07-16 18.39.19.png
アクション>インスタンス/ip ターゲットの登録と登録解除をクリックする。

スクリーンショット 2020-07-16 18.44.07.png
該当のインスタンスを登録済みに追加し、保存をする。
スクリーンショット 2020-07-16 18.47.08.png
一応httpsで接続できたものの、CSSが動作しなかった。
スクリーンショット 2020-07-11 20.32.15.png

Wordpressをhttps対応にさせる

またまたググって下記の記事発見。
AWSに構築したWordPressをhttps対応してみた
WordPress側がhttpsに対応してないため、このようなデザイン崩れが発生するとのこと。

Wordpress側の設定

http://xxx.xxx.xxx.xxx/wp-login.php
で管理画面にログイン。
プラグイン>新規追加で「Really Simple SSL」を検索してインストールし、有効化する。
スクリーンショット 2020-07-17 9.38.08.png

サーバー側での設定

$ cd /var/www/html

# 管理画面から設定が変えれるように権限変更しておく
$ chmod 660 wp-config.php

# 下記設定を
# require_once(ABSPATH . 'wp-settings.php');
# の上部に追加
$ vi wp-config.php
_/_/_/_/_/_/_/_/_/_/_/_/_/_/
$_SERVER['HTTPS']='on';
define('FORCE_SSL_LOGIN', true);
define('FORCE_SSL_ADMIN', true);
_/_/_/_/_/_/_/_/_/_/_/_/_/_/

※必ずrequire_once(ABSPATH . 'wp-settings.php');の上部に入れること。下部に入れると管理画面にログインした時「このページにアクセスする権限がありません。」と表示され、入れません。
参考:https://lucklog.info/wp-ssl-error/

Really Simple SSLでSSLに移行するための準備

設定>一般で「WordPress アドレス (URL)」と「サイトアドレス (URL)」をhttpsに変更する。

スクリーンショット 2020-07-17 9.53.19.png

そして「SSLに移行する準備がほぼ完了しました。」の「はい、SSLを有効化します。」のボタンを押せば、SSL化できそうだが、その前に念のため警告の内容を対処したい。

サイトのバックアップ

WordPressでバックアップを取る4つの方法(初心者向け)
ここまで相当長くなってしまったので、詳しくは上記URL「4. BackWPupで定期的に自動バックアップを取る」「5. 今すぐWordPress全体のバックアップを取る方法」を参照。
プラグイン「BackWPup」をインストール&有効化する。
スクリーンショット 2020-07-17 10.07.26.png
有効化したらBackWPup>新規ジョブを追加をクリックし、一般・スケジュール・DBバックアップ・ファイルの各種設定を上記サイトを参考に行い、変更を保存する。それができたらWordPress全体のバックアップを取る。
スクリーンショット 2020-07-17 10.14.26.png

CSSおよびJavascriptファイルからのHTTP参照の有無の確認

他の記事を見ても特に.css および .js ファイル内からの HTTP 参照の変更をしなくても、特に不具合がなさそうだが、一応確認したい。ダウンロードをしたバックアップを開いて、http://がないか検索。特にそのような記述がなかったので、「はい、SSLを有効化します。」ボタンを押す。

そうすると、CSSの崩れが解消され無事SSL化できた。
イメージ図
スクリーンショット 2020-07-17 10.34.20.png

HTTP→HTTPSへのリダイレクト設定

[新機能]Webサーバでの実装不要!ALBだけでリダイレクト出来るようになりました!
今回はWeb サーバー側で実装ではなく、ALB側で実装をしてみる。
EC2>ロードバランシング ロードバランサー>該当のロードバランサーを選択>下記のリスナー>「HTTP:80」のルール ルールの表示/編集をクリック。
スクリーンショット 2020-07-17 10.40.21.png

+ボタンを押し、ルールを追加する。
スクリーンショット 2020-07-17 10.48.36.png
ルールの挿入を選択し、IFの条件追加で「パス...」で全ての条件でHTTPSリダイレクトさせるため、「*(アスタリスク)」を設定。
スクリーンショット 2020-07-17 10.50.07.png
アクションの追加>リダイレクト先を選択し、HTTPSのポートを443にして「デフォルトホスト、パス、クエリを使用」と「301 - 完全に移動されました」を選択。そして内容を確認し、右上の青い「保存」ボタンを押す。
スクリーンショット 2020-07-17 10.56.24.png

動作確認

設定後、curl -I httpの該当アドレスでアクセスすると
HTTP/1.1 301 Moved Permanentlyと、Location: https://xxx.xxx:443/
となっており、設定したとおりにHTTPS(443)にリダイレクトされたことが確認できる。

$ curl -I http://xxx.xxx
HTTP/1.1 301 Moved Permanently
Server: awselb/2.0
Date: xx, xx xx 2020 xx:xx:xx GMT
Content-Type: text/html
Content-Length: 150
Connection: keep-alive
Location: https://xxx.xxx:443/

まとめ

SSL化するにあたっての手順をまとめた。レンタルサーバーだとボタンを押したらSSL化できたが、AWS上で行うと色々と手順を踏む必要がある。手間がかかるが、駆け出しエンジニアのインフラの勉強にはちょうどいいと思うので、ぜひ挑戦しよう。

22
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
15