【https化 編】SSL 証明書の発行とリダイレクトの設定

【https化 編】SSL 証明書の発行とリダイレクトの設定

前回のフェーズでは、「Wordpres のアップロード上限の変更とBitnami のバナー非表示」を行いました。

今回は、次を行います。その中で「1. SSL 証明書の発行」がメインになります。

  1. Let’s Encrypt でSSL 証明書を発行。
  2. http アクセスをhttps へのリダイレクト。
  3. メインドメインをサブドメインにリダイレクト。

現状の設定でもWebサイト としての運用が行えますが、常時http になってしまい、ユーザーに警告メッセージが表示されてしまいます。また、SEO的にもhttp のままは悪影響を与えます。

https化(SSL化)を行うには、VM インスタンスとのネットワーク間でSSL 証明書が必要になります。SSL 証明書を取得するには主に次の方法があります。

  • サーバにSSL 証明書を発行する。
  • ネットワークからSSL 証明書を提供してもらう。

ここでは、VM インスタンスにLet’s Encrypt を利用してSSL 証明書を発行します。

Let’s Encrypt でSSL 証明書の発行

Let’s Encrypt を利用してVM インスタンスでSSL証明書を発行します。通称、https化やSSL化と言われています。

Let’s Encrypt はドメイン認証(DNS 認証)を行うため、DNS 設定を行う必要があります。DNS 設定が完了していない場合は先にDNS 設定を行ってください

手順

VMインスタンス のSSH 接続を行い、ターミナルを起動させます。

VM インスタンスのSSH 接続

NGINX を停止するために次のコマンドを入力します。

sudo /opt/bitnami/ctlscript.sh stop nginx

Let’s Encrypt のSSL 証明書を発行するために次のコマンドの一部を変更して入力します。

sudo /opt/bitnami/letsencrypt/scripts/generate-certificate.sh -m EMAIL-ADDRESS -d YOURDOMAIN -d www.YOURDOMAIN
  • EMAIL-ADDRESS:メールアドレス。
  • DOMAIN:ドメイン。
    • サブドメインを含め複数のドメインをSSL化を行う場合は、続けて「d=”www.DOMAIN”」と記述。
Let’s Encrypt のSSL証明書を生成
この場合は「sudo /opt/bitnami/letsencrypt/scripts/generate-certificate.sh -m [email protected] -d nippotea.com -d subdomin.nippotea.com」

nippotea.com とsubdomain.nippotea.com のSSL 証明書を生成します。
上記のコマンドを実行すると承認確認が尋ねられるので3回をとも「y」を入力します。

ターミナル:ターミナル:Let’s Encrypt のSSL証明書を生成
ターミナル:ターミナル:Let’s Encrypt のSSL証明書を生成
ターミナル:ターミナル:Let’s Encrypt のSSL証明書を生成

エラーが起きず、SSL 証明書を発行したら、
NGINX を再起動するために次のコマンドを入力します。

sudo /opt/bitnami/ctlscript.sh restart nginx
ターミナル:NGINX を再起動

ブラウザの検索バーに「https://nippotea.com/」 と「https://subdomain.nippotea.com/」を入力し、https 接続ができることを確認します。

発行時の主なエラー

証明書を発行時にエラーが発生する場合はあります。
主な理由は次になります。

  1. ドメイン認証ができなかった。
  2. 何度も証明書の発行した。

ドメイン認証ができなかった

Let’s Encrypt はドメイン 認証を行い、SSL 証明書を発行しています。
DNS 設定を最初に行う必要があります。

この場合のエラーは「error: 400」と表示され、以下のメッセージで返ってきます。

Could not obtain certificates:
acme: Error -> One or more domains had a problem:
[nippotea.com] acme: error: 400 :: urn:ietf:params:acme:error:dns :: No valid IP addresses found for nippotea.com,
url:
[subdomin.nippotea.com] acme: error: 400 :: urn:ietf:params:acme:error:dns :: DNS problem: NXDOMAIN looking up A fo
r subdomin.nippotea.com - check that a DNS record exists for this domain, url:
Error: Something went wrong when running the following command:
Let’s Encrypt:SSL 証明書発行:エラー 400

DNS 設定が正しくできておらず、検索バー「http://nippotea.com/」を入力してもサイトが表示されていないはずです。
フェーズ 2「【ドメイン設定 編】IPアドレスの固定化&Google Domains でドメイン設定」を参考にしながら、DNS 設定を行ってください。

※利用しているDNS サービスによって設定方法が異なります。その公式サポートをご覧ください。

何度も証明書の発行をした

単一のドメインでの証明書 発行は、1週間に5 回までに制限が設けられています。それ以降の証明書 発行の複製の制限対象となり、発行ができません。

この場合のエラーは「error: 429」 と表示され、以下のメッセージで返ってくるはずです。
メッセージの意味は「ドメインの正確なセットに対してすでに発行されている証明書が多すぎます」。SSL 証明書の発行制限の対象となっています。

acme: error: 429 :: POST :: https://acme-v02.api.letsencrypt.org/acme/new-order :: urn:ietf:params:acme:error:rateLimited :: Error creating new order :: too many certificates already issued for exact set of domains: 4watcher365.dev,googlecloud.4watcher365.dev: see https://letsencrypt.org/docs/rate-limits/, url:
Let’s Encrypt:SSL 証明書発行:エラー 429

発行制限をリセットする方法はないため、制限がかかった場合は制限がかかった日から1週間を待たなければなりません。

このエラーの詳細は「Let’s Encryptの証明書の発行制限&発行数の確認」をご覧ください。

http をhttpsへリダイレクト設定

http://〜〜 でアクセスされた場合に、https://〜〜 へのリダイレクトを行います。

VMインスタンス のSSH 接続を行い、ターミナルを起動させます。

bitnami.conf ファイルを編集するために次のコマンドを入力します。

sudo vim /opt/bitnami/nginx/conf/bitnami/bitnami.conf
ターミナル:bitnami.conf を編集

キー「a」を押し、インサイト モードに変更します。
#http server のServer 内に、https でのアクセスをhttps に301 リダイレクト(恒久的な転送)させるために次のコードを適当な箇所に記述します。

return 301 https://$host$request_uri;
ターミナル:https へリダレクト設定
http でのアクセスを https に301 でのリダイレクト(恒久的に移動)させる。

キー「Esc」を押し、ノーマルモードに変更します。
「:wq」で上書き保存を行いファイルを閉じます。

NGINX 設定ファイルを再読み込みするために、次のコマンドを入力します。

sudo nginx -s reload
ターミナル:NIGX を再起動
nginx 設定ファイルを再読み込みします。

「http://nippotea.com/」を入力し、「https://nippotea.com/」 にリダイレクトされていることを確認します。

WordPress のURLを変更

上記のステップでは、http を https へのリダイレクト設定を行いました。
しかし、WordPress の設定ではhttp のままになっています。
この状態で記事を投稿や画像をアップロードするとWordPress 内でエラーが起きる可能性があります。
そのため、WordPress の基本設定をhttps に変更します。

WordPress 管理コンソールにログインし、「設定画面」を開きます。WordPress アドレス (URL)  とサイトアドレス (URL)が、http://〜〜 担っているのを確認します。

WordPress:設定画面
初期時のWordPress 設定は「http://~」になっている。

wp-config.php を編集するために次のコマンドを入力します。

sudo vim /opt/bitnami/apps/wordpress/htdocs/wp-config.php
ターミナル:wp-config.php を編集

次の箇所を探し、「http」から「https」へ変更します。

define(‘WP_SITEURL’, ‘https://’ . $_SERVER[‘HTTP_HOST’] . ‘/’);
define(‘WP_HOME’, ‘https://’ . $_SERVER[‘HTTP_HOST’] . ‘/’);
wp-config.php:https へ変更

「Esc」キーを押し、ノーマルモードに変更します。
「:wq」で上書き保存を行いファイルを閉じます。

NGINX 設定ファイルを再読み込みするために次のコマンドを入力します。

sudo nginx -s reload

WordPress 管理コンソールにログインし、「設定画面」を開きます。
WordPress アドレス (URL)  とサイトアドレス (URL) が「https://~~」に変更された事を確認します。

WordPress:設定画面
https:// からhttps:/ に変更されている。

サブドメイン へリダイレクト

これは少し変わった事情なので一つのドメインでWebサイトを運用される場合はここはスキップしてください。

このWebサイトはnippotea.com を使用せず、サブドメイン「subdomain.nippotea.com」で運用したいと思います。
ただ、 nippotea.com でアクセスされた場合は、subdomain.nippotea.com にリダイレクトするようにしたいと思います。

VMインスタンス のSSH 接続を行い、ターミナルを起動させます。

bitnami.conf ファイルを編集するために次のコマンドを入力します。

sudo vim /opt/bitnami/nginx/conf/bitnami/bitnami.conf
ターミナル:bitnami.conf を編集

「/」キーを押し、インサイトモードに変更します。
#https server のserver 内に次のコードを適当な箇所に記述します。

if ($host != "www.YOURDOMAIN") {
 return 301 https://www.YOURDOMAIN$request_uri;
}
ターミナル:サブドメイン へリダイレクト
サブドメインへのリダイレクトを行う。

「Esc」キーを押し、ノーマルモードに変更し、「:wq」で上書き保存を行いファイルを閉じます。
NGINX 設定ファイルを再読み込みするために次のコマンドを入力します。

sudo nginx -s reload

ブラウザの検索バー「https://nippotea.com/」を入力し、 「https://subdomain.nippotea.com/」にリダイレクトされている事を確認します。また、配下のページも同様にディレクトリを保持したままリダイレクトされてるか確認します。

以上で「SSL 証明書の発行」「リダイレクト設定」は完了となります。
次のフェーズでは、「Cloudflare のCDNを利用してWebサイトを高速表示化」を行います。


まとめ

Google は、2015年ごろからhttps 接続を推奨しており、「http 接続=保護されていない通信」として定めています。
近年は、https が通常化しているのでブログ サイトであってもhttps化しておくことをおすすめします。

全記事

  1. 【はじめ 編】無料を目指してGCPでWordPress 環境構築
  2. 【WordPress構築 編】Google Cloud Platform でWordPress をクリック操作のみでデプロイ
  3. 【WordPresss設定 編】WordPressのアップロード上限を変更&Bitnami バナーの削除
  4. 今ココ→【https化 編】SSL 証明書の発行とリダイレクトの設定
  5. 【Cloudflare 設定 編】Webサイトの表示速度を高速化
  6. 【WP-Stateless 設定 編】WordPres のメディアをGoogle Clould Storage へ移行/バックアップ
  7. 【振り返り 編】GCE でWordPressを構築 with SSL化
  8. 【支払い 編】WordPress×GCPでの2020年1月の支払い料金

その他カテゴリの最新記事