WordPress.com のマネして Let’s Encrypt で HTTPS 化

WordPress.com の HTTPS 化

すべてはここから始まったのである(おおげさ

WordPress.com 上のすべての独自ドメインの HTTPS 化を無料で開始したことをお知らせします。 つまり、私達がホスティングしているすべてのブログとサイトが、最先端の暗号化技術によって安全でパフォーマンス性の高いものになったということです。

https にしようぜって世間の流れにまかせてレッツチャレンジ。

Let’s Encrypt プロジェクトは、効率的かつ自動的に大量のドメインに SSL 証明書を提供する方法を与えてくれました。今年1月に最初のバッチとなる証明書を有効化した後、膨大な数であり常に増え続けている WordPress.com 独自ドメインの処理をスムーズにするため、すぐに Let’s Encrypt と一緒に動き始めました。

これつかえばできるよね?

Let’s Encrypt

Let’s Encrypt とは

わざわざ頑張って英語をよまなくても大丈夫。

ここに Let’s Encrypt がどういうものなのか書いてあります。あと手順とか。

環境

  • Ubuntu 14.04.4 LTS
  • NGINX 1.8.1

Let’s Encrypt のインストール

# git clone https://github.com/letsencrypt/letsencrypt
Cloning into 'letsencrypt'...
remote: Counting objects: 34760, done.
remote: Compressing objects: 100% (40/40), done.
remote: Total 34760 (delta 18), reused 0 (delta 0), pack-reused 34720
Receiving objects: 100% (34760/34760), 9.30 MiB | 3.38 MiB/s, done.
Resolving deltas: 100% (24691/24691), done.
Checking connectivity... done.

これで letsencrypt ディレクトリ下にある letsencrypt-auto というコマンドが使えるようになります

# letsencrypt/letsencrypt-auto -h

ヘルプ見ようと思ったらなんか更新っぽいのはじまった。

The Let's Encrypt agent can obtain and install HTTPS/TLS/SSL certificates.  By
default, it will attempt to use a webserver both for obtaining and installing
the cert. Major SUBCOMMANDS are:

  (default) run        Obtain & install a cert in your current webserver
  certonly             Obtain cert, but do not install it (aka "auth")
  install              Install a previously obtained cert in a server
  renew                Renew previously obtained certs that are near expiry
  revoke               Revoke a previously obtained certificate
  rollback             Rollback server configuration changes made during install
  config_changes       Show changes made to server config during installation
  plugins              Display information about installed plugins

Choice of server plugins for obtaining and installing cert:

  --apache          Use the Apache plugin for authentication & installation
  --standalone      Run a standalone webserver for authentication
  (nginx support is experimental, buggy, and not installed by default)
  --webroot         Place files in a server's webroot folder for authentication

OR use different plugins to obtain (authenticate) the cert and then install it:

  --authenticator standalone --installer apache

More detailed help:

  -h, --help [topic]    print this message, or detailed help on a topic;
                        the available topics are:

   all, automation, paths, security, testing, or any of the subcommands or
   plugins (certonly, install, nginx, apache, standalone, webroot, etc)
# letsencrypt/letsencrypt-auto certonly --webroot -w /usr/share/nginx/html/ -d romea.jp -d wp.romea.jp

しかし NGINX を止めておかないとエラーが出るとか出ないとか。忘れた。

# letsencrypt/letsencrypt-auto certonly --webroot -w ドメインのルートディレクトリ -d ドメイン

ドメインを置き換えたりすると、こういうことですね。

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/romea.jp/fullchain.pem. Your cert will expire
   on 2016-07-21. 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

なおその後エラーが出たのは

  • DNS レコードがそもそも間違っていた
  • 証明書取得してないのに .conf で https に転送していた

というダメダメすぎる理由でした。

HTTP/2

ついでに。

# add-apt-repository 'deb http://nginx.org/packages/mainline/ubuntu/ trusty nginx'
# nginx -v
nginx version: nginx/1.9.15
server {
#    listen     80;
    listen      443 ssl http2;
    ssl on;
    ssl_certificate     /etc/letsencrypt/live/ドメイン/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/ドメイン/privkey.pem;

http になっちゃってるやつ

サイトが https なのに http で呼び出してるけどええんか?みたいな警告みたいなやつ。めんどくさいけどちまちま設定するしかないです。まず WordPress 内のリンクは色々やり方があるみたいなのでお好みの方法で相対パスにしましょう。テンプレートの関係でどうにもならない箇所についてはちまちま編集。

投稿済みの url は “http://” を “/” に置換してしまうのが一番てっとりばやいと思います。今後の投稿中のメディアの url は前に余分なの削ったやつをうまいこと追加して相対パスになるようにしました。他は忘れました。つらい。

SSL Server Test

ここの結果を参考にしてこちょこちょする。なんか Diffie-Hellman (DH) 鍵交換だかなんだかが 1024bit だからあぶないです的な

# openssl dhparam -out dhparams.pem 2048

NGINX の .conf の ssl_certificate_key につづけて

    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'kEECDH+ECDSA+AES128 kEECDH+ECDSA+AES256 kEECDH+AES128 kEECDH+AES256 kEDH+AES128 kEDH+AES256 DES-CBC3-SHA +SHA !aNULL !eNULL !LOW !kECDH !DSS !MD5 !EXP !PSK !SRP !CAMELLIA !SEED';
    ssl_dhparam          /etc/nginx/ssl/dhparam.pem;

こんなんでよろしいらしいです。

リダイレクト

http:// から https:// にアクセスしてもらえるように

server {
    listen      80;
    server_name wp.romea.jp;
    return      301 https:wp.romea.jp$request_uri;
}

リダイレクト。

おしまい。