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