ホームページのSSL化

一人アドベントカレンダー 2016 12 日目 by @takkyuuplayer

1行まとめ

HTTPS必須の時代へ備えよ

概要

常時SSL化は必須?!Google ChromeでHTTPだと警告が表示されるようになる | WEB上手 の記事にあるように時代はHTTPSだ。 昔は有料だったSSL証明書も今は Let's Encrypt - Free SSL/TLS Certificates を使って無料で発行できる。そこで http://www.takkyuuplayer.comHTTPS 対応した。

Let's encrypt でHTTPS対応

http://www.takkyuuplayer.com は さくらVPS上のUbuntu 16.04で動いている。nginxをリバースプロキシとしてつかい、 takkyuuplayer/homepageをデプロイしている。

そのサーバー構成はすべて itamae-kitchen/itamae でやっているので Let’s Encrypt の導入も当然 Itamae を用いて行う。Certbotを参考にしつつ、手順をレシピを書くとこうなる。

  1. let's encrypt インストール
  2. let's encryptが使う <DOCUMENT_ROOT>/.wellknown/ を外からアクセス可能にする
  3. www.takkyuuplayer.com での証明書発行
    • certbot のコードをそのまま使うと、 interactive mode となり itamae でプロビジョニングできないので、 Certbot command-line options を参考に interactive にならないようにオプションを追加してある。
    • また証明書が入っている/etc/letsencrypt/live/www.takkyuuplayer.com を nginx から読み込めるよう permission を 755 にした。もしかしたら nginx をオーナーにするとかグループにするほうがセキュリティ上良いのかも。755だとどういうリスクがあるのか分かる人教えてください。
  4. 発行した証明書を用いてHTTPS公開
  5. httpへのアクセスをすべてHTTPSへリダイレクト

これで HTTPS 化は完了だ。

証明書の自動更新

更に cron を用いて証明書の自動更新を行う。やっつけだがこんな感じでやってみた。

  1. SSL証明書の自動更新

色々試したせいか let's encryptの制限に引っかかり、動かせなかったのでちゃんと思った通りになるのかは知らない。2ヶ月後くらいに証明書の期限がどうなっているのか調べてみようと思う。

次回予告

明日の担当も @takkyuuplayer です。