KUSANAGI(WordPress)をLet's EncryptでSSL対応する

  • 33
    Like
  • 0
    Comment
More than 1 year has passed since last update.
この記事の内容は古いです。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を叩いてサイトが表示されることを確認します。

  1. KUSANAGI for ConoHaのご利用方法
  2. KUSANAGIの初期設定
  3. WORDPRESSのプロビジョニング

kusanagi-ssl_–_Just_another_WordPress_site.png

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_certificatekey)があるので、これを書き換えます。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のままになってしまいます。

一般設定_‹_kusanagi-ssl_—_WordPress.png

完了

証明書情報を確認して問題ないことを確認します。無料でSSL/TLS証明書が取得できるのはありがたいですね。

また、KUSANAGIは色々チューニングが入っていますが、設定ファイルなどは結構シンプルなので、自分で色々カスタマイズすることもできそうです。

kusanagi-ssl_–_Just_another_WordPress_site_と_新規投稿_-_Qiita.png