kansiho's memo

ruby, python, javascript. Rails, wordpress, OpenCV, heroku...

letsencryptの更新が上手く行かなかった時のメモ。自動化までの道のり【rails, nginx,AWS,capistrano環境】

既存のletsencryptディレクトリを消しやり直す

letsencryptの更新が上手く行かなかった時のメモ。

新しく認証し直す。 まず /etc/letsencrypt/ ディレクトリを削除。

sudo git clone https://github.com/letsencrypt/letsencrypt /usr/local/letsencrypt

sudo /usr/local/letsencrypt/letsencrypt-auto --help --debug

sudo service nginx stop 

nginxを止めないと"Could not bind TCP port 443 because it is already in use by another process on this system (such as a web server). Please stop the program in question and then try again.“というメッセージが出る。

sudo /usr/local/letsencrypt/letsencrypt-auto certonly --standalone -d example.com -d www.example.com --agree-tos

で、

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/example.com/fullchain.pem. Your cert will
   expire on 2017-05-08. To obtain a new or tweaked version of this
   certificate in the future, simply run letsencrypt-auto again. To
   non-interactively renew *all* of your certificates, run
   "letsencrypt-auto renew"

上手くいった。

自動化する

sudo vi /etc/cron.daily/letsencrypt
sudo chmod +x /etc/cron.daily/letsencrypt

/etc/cron.daily/letsencrypt の内容。

#!/bin/sh

LE_HOME=/usr/local/letsencrypt
WEBROOT=/var/www/rails/example/current/public #capistranoを使っているのでcurrentディレクトリを挟む
DOMAIN=example.com
SUBDOMAIN=www.example.com
LOG=/var/log/letsencrypt/renew.log

$LE_HOME/letsencrypt-auto certonly --debug --non-interactive --keep-until-expiring --webroot -w $WEBROOT -d $DOMAIN -d $SUBDOMAIN >> $LOG 2>&1
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    echo Automated renewal failed:
    exit 1
fi
service nginx reload

nginx設定ファイルで正しく証明書の場所が示されていることを確認。

/etc/nginx/conf.d/example.conf

server {
        listen 443 ssl;
        server_name xx.xx.xx.xx; #アプリのElastic IPに変更してください
        ssl_certificate      /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key  /etc/letsencrypt/live/example.com/privkey.pem;
        ssl_session_cache builtin:1000 shared:SSL:10m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_session_timeout 1d;
        root /var/www/rails/example/current/public; #自分のアプリケーション
...

参考

qiita.com