この記事の内容は古いです。KUSANAGIは7.8で公式にLet's Encrypt対応が行われました。
KUSANAGIは「超高速WordPress仮想マシン」とうキャッチで、いろいろなクラウドで使えるWordPress実行環境です。KUSANAGIはnginx + hhvm + Percona Serverという構成が基本で、そこに開発元の独自チューニングが施されているものです。
そして、Let's Encryptは、無償で利用できるSSL/TLS証明書の発行サービスで、現在公開ベータプログラムというステータスです。
これらを組み合わせて、SSL/TLS対応のWordPressサイトが無料で作れます。
Let's Encryptはコマンドラインツールを使って証明書の発行/更新など管理を行います。オフィシャルの解説もわかりやすいので簡単です。
ただ、証明書発行の過程でドメインの所有者確認があり、これは外部から自サーバーのポート80にアクセスが来ます。KUSANAGIの場合はWebサーバーなどがセットアップ済みであり、この所有者確認に失敗してしまいます。ここに少し工夫が必要です。
事前準備
この辺はあらかじめ済ませておきます。
- ドメインの取得
- ホスト名の決定 (今回はkusanagi.hironobu.orgとする)
- DNSの設定
KUSANAGIの初期設定とプロビジョニングをする
KUSANAGIの初期設定とプロビジョニング(サイト作成)を済ませておきます。以下の順番通り、マニュアルに沿って実行します。そして、ブラウザでURLを叩いてサイトが表示されることを確認します。
Let's Encryptクライアントのインストールと証明書の取得
オフィシャルサイトの手順に沿ってクライアントをインストールします。
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
本来はここで「./letsencrypt cert」などを実行するのですが、このコマンドはポート80とLISTENしようとするので、すでにKUSANAGI(WordPress)実行中の場合はエラーになります。
実は英語サイトの方に解説があるのですが、--webrootと言うオプションを使うと、既に稼働しているWebサーバーとそのDocumentRootを使って本人確認の手続きを進めることができます。オプションは以下のような書式です。-wがDocumentRootのパス、-dがホスト名です。
./letsencrypt-auto certonly --keep-until-expiring --webroot -w /var/www/example.com -d example.com,www.example.com
(オフィシャルサイトから引用)
これを実行すると、DocumentRoot配下に/.well-known/acme-challenge/というディレクトリが作成され、その中にランダムな名前のファイルが作られます。本人確認は、そのURLに外部からアクセスできるかを確認することで行われます。以下のようなURLです。
http://kusanagi.hironobu.org/.well-known/acme-challenge/xxxxxxxxxxxxxxxx.html
KUSANAGI上でこのURLを作っても、403 Forebiddenになっていしまい、本人確認に失敗します。ここに少し工夫が必要です。
nginxの設定変更
.well-known配下のファイルにアクセスできるようにします。KUSANAGIのサイト毎の設定ファイルは/etc/nginx/conf.d/[プロファイル名]_http.confです。"location /"の上に以下の設定を追加して、nginxをリロードします。
location ~ /.well-known {
allow all;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
その後、以下のコマンドを実行します。KUSANAGIのDocumentRootは以下のように/home/kusanagi/[プロファイル名]/DocumentRootになります。
./letsencrypt-auto certonly --webroot -w /home/kusanagi/[プロファイル名]/DocumentRoot/ -d kusanagi.hironobu.org
これで証明書が取得できます(出力は以下のようになります)
# ./letsencrypt-auto certonly --webroot -w /home/kusanagi/main/DocumentRoot/ -d kusanagi.hironobu.org
Updating letsencrypt and virtual environment dependencies......
Requesting root privileges to run with virtualenv: /root/.local/share/letsencrypt/bin/letsencrypt certonly --webroot -w /home/kusanagi/main/DocumentRoot/ -d kusanagi.hironobu.org
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/kusanagi.hironobu.org/fullchain.pem. Your
cert will expire on 2016-05-02. 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/配下に保存されます。
nginxにSSLの設定をする
SSLの設定ファイルは/etc/nginx/conf.d/[プロファイル名]_ssl.confです。一番上のあたりに証明書とキーファイルを指定するディレクティブ(ssl_certificateとssl_certificate_key)があるので、これを書き換えます。fullchain.pemが中間証明書も含んだ証明書ファイルです。
server {
listen 443 ssl;
server_name kusanagi.hironobu.org;
ssl_certificate /etc/letsencrypt/live/kusanagi.hironobu.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/kusanagi.hironobu.org/privkey.pem;
(以下略)
そしてnginxをリスタートします。(CentOS7とかの場合はsystemctl)
service nginx restart
WordPressの設定
サーバー側の設定は以上です。最後にWordPressの「サイトアドレス」をhttpsに変更して完了です。http://[ホスト名]/wp-adminからログインして「設定」→「一般設定」を開いて、「WordPressアドレス」と「サイトアドレス」を変更します。これをしておかないと、メディアファイルのURLがhttpのままになってしまいます。
完了
証明書情報を確認して問題ないことを確認します。無料でSSL/TLS証明書が取得できるのはありがたいですね。
また、KUSANAGIは色々チューニングが入っていますが、設定ファイルなどは結構シンプルなので、自分で色々カスタマイズすることもできそうです。