【初心者向け】だんだん強くなるWordPressサイト構築 Lv3
はじめに
こんにちは! 川名(政)です。
前回はWordPressのインストールまで実施しました。今回はドメインの設定とSSL/TLSサーバ証明書のインストールを行いますので、お付き合いよろしくお願いいたします!
概要
- 構成の確認
- セキュリティグループの変更(Webサーバ)
- ドメインの登録(取得)とDNS設定
- SSL/TLSサーバ証明書の取得
- SSL/TLSサーバ証明書のインストール
- 動作確認
事前準備
- 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作成手順を参考にしました。
今回は認証局が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サイトからダウンロードできます)
今回はドメイン認証型なので、認証局の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などもあるので別の機会に試してみたいと思います。
Discussion