1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ACMからSSL証明書発行し、wordpressをSSL化までの手順

Last updated at Posted at 2023-03-03

前書き

wordpressの構築の説明は省きます。
今回はACM(AWS Certificate Manager)からSSL証明書を発行し、ALBを作成後、HTTPS接続させることを行いました。

前提条件

・WordpressサーバーはEC2インスタンスで作成されているものとします。
・お名前ドットコムでドメインを購入。(shunwakawaka.blog)
・Elastic IPでwebサーバーがあるインスタンスに関連付けされている。
・Route53でIPとドメインの名前解決がしてある。
・DBはRDSを使用しています。

実践

①AWS Certificate Manager(ACM)からSSL証明書を発行
②Elastic Load Balancing(ELB)作成
③.htaccessファイルとwp-config.phpファイルに設定を追記

①AWS Certificate Manager(ACM)からSSL証明書を発行

手順

1.AWS Certificate Manager(ACM)のコンソール画面から〔証明書をリクエスト〕をクリック
image.png

2.証明書タイプを〔パブリック証明書をリクエスト〕を選択し、〔次へ〕をクリック
image.png

3.ドメイン名に購入したドメイン名を記載
検証方法は〔DNS検証〕を選択
キーアルゴリズムは〔RSA 2048〕を選択
〔リクエスト〕をクリック
image.png
image.png

4.〔証明書を表示〕をクリック
image.png

この時はまだステータスが〔保留中の検証〕となっています。
image.png

5.〔Route53でレコードを作成〕をクリック
image.png

6.Route53にCNAMEレコード作成され、先ほどの検証ステータスが成功となっていたら終了

②Elastic Load Balancing(ELB)作成

手順

1.EC2のコンソール画面に移動

2.ロードバランンシングのターゲットグループをクリックし、
 〔Create target group〕をクリック
image.png

3.ターゲットタイプは〔インスタンス〕を選択し、任意のターゲットグループ名を付ける
※EC2インスタンス単位でロードバランシングするため。
image.png

VPCはEC2が設定されているところを選択
image.png

ヘルスチェックのプロトコルはHTTPでヘルスチェック先のパスは/wp-admin/admin-ajax.phpと入力し、〔次へ〕をクリック
※/wp-admin/admin-ajax.phpはハートビートAPIエンドポイントで、WordPressのアプリケーションとしての正常性を確認するために使用されているため。
image.png

4.起動しているインスタンスにチェックを入れ、80ポートであることを確認し、
〔Include as pending below〕をクリック
image.png

5.〔Review targets〕にて対象のインスタンスが〔Pending〕になっていることを確認し、 〔Create target group〕をクリック
image.png

6.ターゲットグループの作成に成功したことを確認

7.ELBのセキュリティーグループを作成するため、
EC2ダッシュボードの左より〔セキュリティグループ〕をクリック
image.png

8.任意のセキュリティーグループ名と使用するVPCを選択
image.png

アウトバンドルールで以下の通りに設定し、〔セキュリティーグループを作成〕をクリック
image.png

9.EC2ダッシュボードの左メニューより〔ロードバランサー〕をクリックし、〔Create load balancer〕をクリック
image.png

10.Application Load Balancerを選択
image.png

11.ロードバランサー名などを設定
image.png

Network mappingの設定で使用するVPCとサブネットを2個選択
※サブネットはインスタンスが所属しているサブネットを選択
image.png

セキュリティグループ設定は先程作成した、
ELB用のセキュリティグループを設定
「default」のセキュリティグループの右の「✖︎」をクリックし、削除
image.png

〔Add listener tag〕を押し、プロトコルを〔HTTPS〕と〔HTTP〕を選択ターゲット選択画面にて先程作成したターゲットを選択
image.png

〔Secure listener settings〕で先ほど作成したSSL証明書を選択
image.png

12.先程のターゲットグループの画面に遷移し、〔web-target〕の〔targets〕を確認する。
Health statusが緑表示で〔healthy〕になっていることを確認する。
image.png

③.htaccessファイルとwp-config.phpファイルに設定を追記

手順
1.SSH接続でwebサーバーにログイン

2.wp-config.phpの設定を追加

#cd /var/www/html/
#vi wp-config.php
追記
$_SERVER['HTTPS']='on';
define('FORCE_SSL_LOGIN', true);
define('FORCE_SSL_ADMIN', true);

$_SERVER['HTTPS']='on';
この設定は、サーバーにHTTPS接続が使用されていることを示します。

define('FORCE_SSL_LOGIN', true);
この設定は、WordPressのログインページで常にSSL接続を使用するように設定します。

define('FORCE_SSL_ADMIN', true);
この設定は、WordPressの管理画面で常にSSL接続を使用するように設定します。

3..htaccessの設定を追加

#vi .htaccess

追記
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule ^/?(.*) https://%{HTTP_HOST}/$1 [R,L]

# systemctl restart httpd

RewriteCond %{HTTP:X-Forwarded-Proto} !=https
この設定は、X-Forwarded-Protoヘッダーがhttpsでない場合に、リライトルールを実行します。このヘッダーは、クライアントが使用しているプロトコルを示すもので、この設定によって、クライアントがHTTPSでアクセスしているかどうかを判断します。

RewriteRule ^/?(.*) https://%{HTTP_HOST}/$1 [R,L]
この設定は、リクエストされたURLをHTTPSにリダイレクトします。
^/?(.) というパターンにマッチするリクエストURIを HTTPS にリダイレクトするように設定されています。ここで、^/? はリクエストURIの先頭にスラッシュがあるかどうかをチェックし、(.) はスラッシュ以降の任意の文字列をキャプチャします。
次に、https://%{HTTP_HOST}/$1 というリダイレクト先のURLが指定されています。ここで、%{HTTP_HOST} はリクエストヘッダーに含まれるホスト名を取得し、$1 は前述のキャプチャグループでマッチした文字列を挿入します。つまり、元のリクエストURIのスキーマをHTTPSに変更したものにリダイレクトすることになります。R フラグは外部リダイレクトを指定し、L フラグはこれ以降のルールの実行を停止することを示している。

4.最後にサイトがきちんとSSL化されていることを確認
スクリーンショット (8).png

最後に

ALBを設置したあとにブラウザでHTTPS接続できているか確認しようとしたら504エラーが出てなんじゃこりゃとなってしまいましたが、セキュリティーグループの見直しと設定ファイルの追記を行ったら無事に解決できました!
あとsystemctl restart忘れがち!
次回はCloud frontに、WAFを導入した構成でもできると書いてあったので、時間があったらやります。

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?