目的
AWS EC2上のWordpressをhttpsで接続させたい。現在はhttpで接続を受け付けている。
Wordpressはbitnamiのパッケージをインストールした。
この記事の全体像
- 証明書を作成する
- ELBの設定を行う
- Wordpress側の設定を行う
1. 証明書を作成する
ポイントは以下の通り
- AWS上のFWを解放する
- sslで利用するドメイン配下のサーバで作成する
作業流れ
-
ELB(ロードバランサ)の443ポートを空ける
とりあえずTCPで443を空ける必要がある(証明書がまだないからhttpsはあけられない) -
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
- 完成図はこんな感じ
まとめ
- ここまでできると、サイトへhttpsでアクセスすることができる
- ただし、CSSとかが残念な感じ
- httpは今まで通り利用可能
3. Wordpress側で設定する
ポイントは以下の通り
- 管理ページについて、
wp-config.php
に記載する場所に注意
作業流れ
-
サイトURLを変更する
管理画面から変更できれば画面から。できない場合はwp-config.phpを編集するwp-config.phpdefine('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.phpdefine('FORCE_SSL_ADMIN', true); if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === "https") { $_SERVER['HTTPS'] = 'on'; }
エラー
管理画面の設定の書く場所を間違えると、ログイン後に(ログイン画面は問題ない)以下のエラーが発生して混乱する。
ググっても、DBのテーブルの接頭辞を変更しろとかばっかり出てきて困る。
このページにアクセスするための十分なアクセス権がありません
まとめ
- これで管理画面は対応完了
- 通常画面は、HTTPでもHTTPSでもどちらでもアクセスできるようになっているはず