経緯
QiNeelのSSL証明書が来月切れるんだっけ↓
とりあえず更新しとこう(過去記事参照)
↓
あれブラウザでアクセスしたら証明書エラーだぞΣ(゚д゚lll)
↓
そういや以前StartCom(の親会社のWoSign)がやらかして、ルート証明書が無効化されたんだっけ
↓
しゃーねーや他の認証局にすっか
↓
そういやLet's Encryptってのがあったな
↓
Nginxリバプロ構成の証明書取得方法を書いた記事があまりないな
↓
しゃーねーや自分で調べっか
↓
せっかくだから記事のネタにしよう
説明の前に
以下の作業はすべて、(取得したい証明書の)ドメインのAレコードに外部からアクセスした際の窓口となるサーバで行います。基本的にはウェブサーバのことですが、リバースプロキシやロードバランサを使っているならそれが動いているサーバで行ってください。
AmazonのELBみたいにバランサ自体にログインできない場合は諦めてください。AWSなら無料の証明書が使えるみたいなのでそっち使ったほうがいいかも。
あと、この作業はUbuntu 14.04で確認しています(16.04じゃなかった)
準備
Certbotのインストール
まずはLet's EncryptのCertbotをインストール。$ sudo wget https://dl.eff.org/certbot-auto -P /usr/local/bin $ sudo chmod a+x /usr/local/bin/certbot-auto $ certbot-auto
サーバ側の設定
ドメイン認証時には以下の作業がCertbotによって行われます。- 指定ドメインの
/.well-known
以下に外部(Let's Encryptの認証サーバ)からアクセスが来る - そのため、あらかじめ認証データを用意しておく
まずはcertbot用のワーキングディレクトリを作成。別にここじゃなくてもどこでもいいです。
$ sudo mkdir -p /var/www/letsencrypt
さらに
/.well-known
以下へのアクセスを上記のワーキングディレクトリに割り当てる設定をします。server { # Let's Encrypt location /.well-known { root /var/www/letsencrypt; } ... }
最後にNginxをリロード
$ sudo service nginx reload
ドメイン認証&証明書発行
$ sudo certbot-auto certonly --webroot -w /var/www/letsencrypt -d DOMAIN
DOMAIN
は証明書を発行したいドメインで。連絡用のメアドを聞かれたり、利用許諾に同意しろって言われたりします。
無事に認証できると Congratulations! っていわれて、
/etc/letsencrypt
以下に証明書やら秘密鍵やらができます。もう一度Nginxの設定
証明書と秘密鍵をNginxに設定してあげましょう。server { ... ssl on; ssl_certificate /etc/letsencrypt/live/DOMAIN/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/DOMAIN/privkey.pem; ... }もう一度Nginxをリロード
$ sudo service nginx reloadHTTPSページにアクセスできていれば成功です!
更新
Let's Encryptの特徴は、証明書の更新が自動でできること。証明書の期限は90日と短いのですが、自動更新のおかげで気になりません。というか自動更新できない他の証明書のほうが面倒なくらいです。
やり方は簡単で、cronで自動更新コマンドを設定するだけ。
$ crontab -eのあとで
00 04 * * * certbot-auto renew --renew-hook "sudo service nginx reload" 1>/dev/null 2>/dev/nullこれで毎日午前4時に取得したすべての証明書が自動更新されます。
毎日実行して大丈夫なの?と心配するかもしれませんが、実際に更新されるのは期限が近い証明書だけなので無問題です。
証明書が更新されると
--renew-hook
で指定したコマンドが実行されるので、ここでNginxをリロードしておきます。証明書が更新されなければリロードされません。
sudoの実行にパスワードを必須にしていると
--renew-hook
で毎回止まってしまうので、その場合はroot権限でcronを実行します。ただしrootのホームディレクトリ内にcertbot用の設定がされている必要があるので、一度以下のコマンドを実行しておきます。
$ sudo su # certbot-auto横着して
sudo certbot-auto
だと、環境変数が引き継がれてしまって( USER
や HOME
が元のユーザのままになっていて)うまくいかないときがあります。
0 件のコメント:
コメントを投稿