💪

【初心者向け】だんだん強くなるWordPressサイト構築 Lv3

2022/11/10に公開

はじめに

こんにちは! 川名(政)です。
前回はWordPressのインストールまで実施しました。今回はドメインの設定とSSL/TLSサーバ証明書のインストールを行いますので、お付き合いよろしくお願いいたします!

概要

  1. 構成の確認
  2. セキュリティグループの変更(Webサーバ)
  3. ドメインの登録(取得)とDNS設定
  4. SSL/TLSサーバ証明書の取得
  5. SSL/TLSサーバ証明書のインストール
  6. 動作確認

事前準備

  • AWSアカウント作成
  • AdministratorAccessを付与したIAMユーザーの作成
  • 前回までの構成

1. 構成の確認

今回は構成に変更はありません。

構成図 - WordPressサイト Lv3

※構築は大阪リージョン(ap-northeast-3)で行っています

2. セキュリティグループの変更(Webサーバ)

最初にWebサーバのセキュリティグループを編集し、HTTPS(ポート443)の通信許可設定をします。

EC2のページでWebサーバを選択し、[セキュリティ]のタブから設定しているセキュリティグループをクリック。

該当のセキュリティグループが表示されるので[インバウンドのルールを編集]をクリック。

[ルールを追加]をクリックし下記を追加設定したら[ルールを保存]をクリック。
タイプ: HTTPS
ソース: Anywhere-IPv4 ※自動で0.0.0.0/0が入力されます

Webサーバ用のセキュリティグループにHTTPSの通信が許可されるようになりました!

3. ドメインの登録(取得)とDNS設定

現状はWordPressサイトへアクセスするとき、下記のようにIPアドレスベースでアクセスしています。
アクセスURL: http://<WebサーバのグローバルIPアドレス>/

ドメインの登録を行いWordPressサイトにドメインベースのURLでアクセスできるようにします。

■ドメインの登録(取得)
ドメインの登録についてはJPRS(日本レジストリサービス)のWebサイトに「JPドメイン名を取扱う指定事業者一覧」があるので、記載されている事業者のWebサイトからドメイン登録の申請をします。
※申請方法などは各指定事業者に従ってください

今回はValue Domain(バリュードメイン)でドメインを登録しました。

■DNS設定(Route 53)
AWSマネジメントコンソールからRoute53のページへ移動します。
ナビゲーションペインで[ホストゾーン]を選択し、[ホストゾーンの作成]をクリック。

下記を設定し[ホストゾーンの作成]をクリック。
ドメイン名: ※登録したドメイン名を入力
タイプ: パブリックホストゾーンを選択

登録したドメイン名のホストゾーンが作成されました。
続けて[レコードを作成]をクリックします。

今回は登録したドメインとサブドメイン(www付き)の両方でWordPressサイトへアクセスできるように、2つのAレコードを作成します。

下記の内容で設定し、[レコードを作成]をクリック。
※[別のレコードを追加]をクリックすると複数のレコードをまとめて作成できます

・レコード1(登録したドメイン)
レコード名: ※空白
値: Webサーバのパブリック IPv4アドレス

・レコード2(サブドメイン)
レコード名: www
値: Webサーバのパブリック IPv4アドレス

作成したレコードがホストゾーンに追加されました。
ここでデフォルトで作成されているNSレコードのネームサーバ情報を控えておきます。

ドメインを登録した事業者のWebサイトへ移動し、該当ドメインのネームサーバを先ほど控えておいたAWSのネームサーバ情報に変更します。
※下記はValue Domain(バリュードメイン)のDNS設定画面です

参考 - Value Domain ネームサーバ設定画面

ネームサーバ変更後にWordPressサイトへドメインベースのURLでアクセスしてみます。
アクセスURL: http://<登録したドメイン>/

問題なくページが表示されることを確認できました。
次はSSL/TLSサーバ証明書の設定を行い、HTTPSでアクセスできるようにします。

4. SSL/TLSサーバ証明書の取得

■SSL/TLSサーバ証明書の取得
SSL/TLSサーバ証明書は認証局(CA:Certificate Authority)が発行します。
秘密鍵(鍵ペア)の生成やCSR(証明書署名要求)の作成手順については、認証局または認証局が指定した事業者のWebサイトで確認してください。
今回はJPRSのサイトにあるOpenSSLのCSR作成手順を参考にしました。
https://jprs.jp/pubcert/service/manual/

今回は認証局がJPRS(日本レジストリサービス)のドメイン認証型証明書(DV証明書)をさくらのSSL(さくらインターネット)から取得しました。

下記は取得したSSL/TLSサーバ証明書です。発行先が今回登録したドメイン、発行者がJPRSとなっています。

SSL/TLSサーバ証明書の各タブの内容を並べてみました。

中央の[詳細]タブでは[サブジェクト]のフィールドで登録したドメイン(CN:Common Name)が確認できます。
またwww付きも含むオプションで申請したため、サブジェクト代替名(SAN:Subject Alternative Name)でwwwが付いたサブドメインも含まれていることが確認できます。

右の[証明のパス]タブではルート証明書がSECOM Trust Systems、中間CA証明書がJPRSになっていることが確認できます。

■中間CA証明書の取得
SSL/TLSサーバ証明書のインストール作業には中間CA証明書も必要になるため、認証局から取得します。(認証局のWebサイトからダウンロードできます)
https://jprs.jp/pubcert/service/certificate/

今回はドメイン認証型なので、認証局のJPRSからドメイン認証型(DV)用の中間CA証明書を取得しました。

見た目はSSL/TLSサーバ証明書と似ていますが発行先や発行者が変わっています。
[証明のパス]も正しいことが確認できました。

次はWebサーバ内でSSL/TLSサーバ証明書のインストール作業を行います。

5. SSL/TLSサーバ証明書のインストール

今回のインストール作業には以下のファイルが必要となりますので事前にWebサーバ内へ移動しておきます。

ファイルの種類 コマンド内での表記例
SSL/TLSサーバ証明書 server.crt
中間CA証明書 ca.crt
秘密鍵 server.key

準備が整いましたらWebサーバへ接続します。
※コマンド実行結果は必要な箇所のみ抜粋しています

■mod_sslのインストール
まずApacheでmod_sslをインストールします。

・mod_sslのインストール

$ sudo yum install mod_ssl
Installed:
  mod_ssl.x86_64 1:2.4.54-1.amzn2                                                                                                                        
Dependency Installed:
  libtalloc.x86_64 0:2.1.16-1.amzn2                                            sscg.x86_64 0:2.3.3-2.amzn2.0.1                                           

Complete!

■証明書ファイルの配置ディレクトリの確認
まずssl.confの内容を確認します。

$ less /etc/httpd/conf.d/ssl.conf

サーバ証明書(Server Certificate)関連の記述を見ると、デフォルトでは「/etc/pki/tls/」配下に証明書ファイルを配置する記述になっています。

...(略)...
#   Server Certificate:
# Point SSLCertificateFile at a PEM encoded certificate.  If
# the certificate is encrypted, then you will be prompted for a
# pass phrase.  Note that a kill -HUP will prompt again.  A new
# certificate can be generated using the genkey(1) command.
SSLCertificateFile /etc/pki/tls/certs/localhost.crt

#   Server Private Key:
#   If the key is not combined with the certificate, use this
#   directive to point at the key file.  Keep in mind that if
#   you've both a RSA and a DSA private key you can configure
#   both in parallel (to also allow the use of DSA ciphers, etc.)
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key

#   Server Certificate Chain:
#   Point SSLCertificateChainFile at a file containing the
#   concatenation of PEM encoded CA certificates which form the
#   certificate chain for the server certificate. Alternatively
#   the referenced file can be the same as SSLCertificateFile
#   when the CA certificates are directly appended to the server
#   certificate for convinience.
#SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt
...(略)...

確認してみると「/etc/pki/tls/」配下にディレクトリが準備されています。今回はこのディレクトリに配置するように設定します。

$ ls -l /etc/pki/tls/
lrwxrwxrwx 1 root root    49 Jun 13 18:52 cert.pem -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
drwxr-xr-x 2 root root   117 Aug 12 07:09 certs
drwxr-xr-x 2 root root    74 Aug 12 07:09 misc
-rw-r--r-- 1 root root 10923 Jul 21 18:24 openssl.cnf
drwxr-xr-x 2 root root     6 Jul 21 18:27 private

以下のように証明書ファイルを配置します。

ファイルの種類 コマンド内での表記 配置場所
SSL/TLSサーバ証明書 server.crt /etc/pki/tls/certs/server.crt
中間CA証明書 ca.crt /etc/pki/tls/certs/ca.crt
秘密鍵 server.key /etc/pki/tls/private/server.key

■ssl.conf内の記述変更
ssl.conf内に証明書ファイルの配置場所を記述します。

$ sudo vi /etc/httpd/conf.d/ssl.conf

・ssl.confの記述(変更後)

...(略)...
#   Server Certificate:
# Point SSLCertificateFile at a PEM encoded certificate.  If
# the certificate is encrypted, then you will be prompted for a
# pass phrase.  Note that a kill -HUP will prompt again.  A new
# certificate can be generated using the genkey(1) command.
SSLCertificateFile /etc/pki/tls/certs/server.crt

#   Server Private Key:
#   If the key is not combined with the certificate, use this
#   directive to point at the key file.  Keep in mind that if
#   you've both a RSA and a DSA private key you can configure
#   both in parallel (to also allow the use of DSA ciphers, etc.)
SSLCertificateKeyFile /etc/pki/tls/private/server.key

#   Server Certificate Chain:
#   Point SSLCertificateChainFile at a file containing the
#   concatenation of PEM encoded CA certificates which form the
#   certificate chain for the server certificate. Alternatively
#   the referenced file can be the same as SSLCertificateFile
#   when the CA certificates are directly appended to the server
#   certificate for convinience.
SSLCertificateChainFile /etc/pki/tls/certs/ca.crt
...(略)...

■httpd.conf内の記述を確認
mod_sslとssl.confを読み込む記述があるか確認します。

$ less /etc/httpd/conf/httpd.conf

httpd.conf内に以下の記述がありました。

Include conf.modules.d/*.conf ※Apacheモジュールを読み込む設定
IncludeOptional conf.d/*.conf ※該当ディレクトリのconfigを読み込む設定

mod_sslとssl.confは以下で読み込まれる設定となっていることが確認できました。

$ less /etc/httpd/conf.modules.d/00-ssl.conf
LoadModule ssl_module modules/mod_ssl.so

$ ls -l /etc/httpd/conf.d
-rw-r--r-- 1 root root 9798 Oct 26 00:52 ssl.conf

■Apacheの停止と起動

$ sudo systemctl stop httpd
$ sudo systemctl start httpd
$ systemctl status httpd
Active: active (running)

以上でSSL/TLSサーバ証明書のインストール作業は完了です。
最後にブラウザによるアクセスで動作確認を行います。

6. 動作確認

WordPressサイトへHTTPSかつドメインベースのURLでアクセスしてみます。
アクセスURL: https://<取得したドメイン>/

ページのレイアウトに問題があります。利用ブラウザはFireFoxなので開発者ツール(F12キー)でページの取得状況を確認してみます。
一部のファイルがIPアドレスベースでリクエストされ、SSLエラーにより取得できていないようです。

WordPress設定の[サイトアドレス(Site Address)]がIPアドレスベースになっているため修正します。ひとまずHTTPでWordPress管理画面へログインしてみます。

・WordPress管理画面
http://<取得したドメイン>/wp-admin/

WordPress管理画面の[設定(Setting)]から下記のように変更します。

サイトアドレス(Site Address): https://<取得したドメイン(wwwあり)>
※画像ではWordPressアドレスも変更していますが、指定を間違えるとブラウザからWordPress管理画面へアクセスできなくなるのでご注意ください

変更を保存後、再度WordPressサイトへアクセスしてみます。
アクセスURL: https://<取得したドメイン(www付き)>

今度は問題なくページの表示ができました。ついでにブラウザで今回設定したSSL/TLSサーバ証明書の確認をしておきます。
URLの左にある[鍵のマーク]をクリックして[安全な接続]を選択後、下の[詳細]をクリックします。

[セキュリティ]のアイコンを選択し、[証明書を表示]をクリックします。

今回設定したSSL/TLSサーバ証明書がWordPressサイトで利用されていることが確認できました。

さいごに

今までSSL/TLSサーバ証明書を扱うことはありましたが、CSRを作成し認証局に発行してもらうというのは初めてでした。無償で発行できるLet’s Encryptなどもあるので別の機会に試してみたいと思います。

MEGAZONE株式会社 Tech Blog

Discussion