Help us understand the problem. What is going on with this article?

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

More than 3 years have 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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした