nginx
AWS
EC2
SSL証明書
letsencrypt

Let's EncryptでSSLの設定〜自動更新

More than 1 year has passed since last update.

最近ちょくちょく使う機会が増えたのでメモ。

EC2、nginxを使用する前提です。


ダウンロード

$ sudo curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto

$ sudo chmod 700 /usr/bin/certbot-auto


証明書と鍵の発行

AWSのセキュリティグループでportの80(http)と443(https)を解放し、以下を実行する。



$ sudo /usr/bin/certbot-auto certonly --standalone --debug -d example.com -m example@example.com --agree-tos -n


  • --debug

    AWSは--debugがないと実行できない。


  • --standalone

    特にrootディレクトリを指定しないので --standalone オプションを設定。


  • -d

    ドメインを指定する。


  • -m

    メールアドレスを指定する。トラブルがあった場合や更新期限が近くなった際にメールが送られてる。


  • --agree-tos

    規約同意。


  • -n

    もろもろの対話入力をスキップ。



IP制限などしたい場合は解放したportを再度すぐ閉じる


nginxに証明書と鍵の設定

/etc/letsencrypt/live/ 以下に証明書と鍵が発行されるのでこれをnginxに設定

upstream example_server {

server 127.0.0.1:3000;
}

server {
listen 80;

# Allow accessing /ping without https. Useful when placing behind load balancer.
location /ping {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://example_server;
}

location / {
# Enforce SSL.
return 301 https://$host$request_uri;
}
}

server {
listen 443 ssl;
ssl on;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

gzip on;
gzip_types *;
gzip_proxied any;

location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://example_server;
proxy_redirect off;
}
}


cronにletsencrypt自動更新、nginx再起動を設定

$ sudo vi /etc/cron.d/letsencrypt

0 1 * * * /usr/bin/certbot-auto renew --force-renew && /etc/init.d/nginx reload


参考

http://qiita.com/takahiko/items/a08895550727b95b6c36