Posted at

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

More than 3 years have passed since last update.


目的

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でもどちらでもアクセスできるようになっているはず


参考