AWS上のWordpressでLet's Encryptを利用する

  • 7
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

目的

AWS EC2上のWordpressをhttpsで接続させたい。現在はhttpで接続を受け付けている。

Wordpressはbitnamiのパッケージをインストールした。

この記事の全体像

  1. 証明書を作成する
  2. ELBの設定を行う
  3. Wordpress側の設定を行う

1. 証明書を作成する

ポイントは以下の通り

  • AWS上のFWを解放する
  • sslで利用するドメイン配下のサーバで作成する

作業流れ

  • ELB(ロードバランサ)の443ポートを空ける とりあえずTCPで443を空ける必要がある(証明書がまだないからhttpsはあけられない)

elb_open.png

  • EC2側で443を受け付ける
    インスタンス→セキュリティグループ→インバウンド
    EC2_open.png

  • letsencryptのコマンドを実行する
    helpするとパッケージがDLされる。Congratulations!と出れば成功。

  $ git clone https://github.com/letsencrypt/letsencrypt
  $ cd letsencrypt
  $ ./letsencrypt-auto --help
  $ ./letsencrypt-auto certonly -a standalone -d <domain>
  Updating letsencrypt and virtual environment dependencies......
  Requesting root privileges to run with virtualenv: sudo /home/bitnami/.local/share/letsencrypt/bin/letsencrypt certonly --standalone -d <domain>

  IMPORTANT NOTES:
   - Congratulations! Your certificate and chain have been saved at
     /etc/letsencrypt/live/column.clintal.com/fullchain.pem. Your cert
     will expire on 2016-05-08. To obtain a new version of the
     certificate in the future, simply run Let's Encrypt again.
   - If you like Let's Encrypt, please consider supporting our work by:

     Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
     Donating to EFF:                    https://eff.org/donate-le 
  • ファイルが存在することを確認する 実体は、/etc/letsencrypt/archive/<domain>にあることに注意
  $ sudo ls /etc/letsencrypt/live/<domain>

エラー

  • ELBでポートがちゃんと開放できていないと以下のエラーが表示される
  IMPORTANT NOTES:
   - The following errors were reported by the server:

      Domain: <domain>
      Type:   urn:acme:error:connection
      Detail: Failed to connect to host for DVSNI challenge

まとめ

  • ここまでが準備

2. ELBの設定を行う

ポイントは以下の通り

  • アップする内容を間違えないように

作業流れ

  • ELBにSSL証明書をアップする ロードバランサ→リスナー→編集
    • ロードバランサーのプロトコル: HTTPS(セキュアHTTP), 443
    • インスタンスのプロトコル: HTTP, 80
    • SSLは1で取得したファイルの中身をそのままコピペする
      • プライベートキー: privkey1.pem
      • パブリック証明書: cert1.pem
      • 証明書チェーン: chain1.pem
  • 完成図はこんな感じ ELB_complete.png

まとめ

  • ここまでできると、サイトへhttpsでアクセスすることができる
  • ただし、CSSとかが残念な感じ
  • httpは今まで通り利用可能

3. Wordpress側で設定する

ポイントは以下の通り

  • 管理ページについて、wp-config.phpに記載する場所に注意

作業流れ

  • サイトURLを変更する 管理画面から変更できれば画面から。できない場合はwp-config.phpを編集する
wp-config.php
  define('WP_SITEURL', 'https://' . $_SERVER['HTTP_HOST'] . '/');
  define('WP_HOME', 'https://' . $_SERVER['HTTP_HOST'] . '/');
  • 管理画面のSSL化 wp-config.phpに以下を記載する。 ただしrequire_once(ABSPATH . 'wp-settings.php');より前に書かないとダメらしい!
wp-config.php
  define('FORCE_SSL_ADMIN', true);
  if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === "https") {
    $_SERVER['HTTPS'] = 'on';
  }

エラー

管理画面の設定の書く場所を間違えると、ログイン後に(ログイン画面は問題ない)以下のエラーが発生して混乱する。
ググっても、DBのテーブルの接頭辞を変更しろとかばっかり出てきて困る。

このページにアクセスするための十分なアクセス権がありません

まとめ

  • これで管理画面は対応完了
  • 通常画面は、HTTPでもHTTPSでもどちらでもアクセスできるようになっているはず

参考