Certbotを使ってHTTPSに対応する

SSL/TLS サーバ証明書の取得・更新作業を簡単に行えるCertbotを使用してHTTPSに対応したのでその手順をメモ。OSはalpinelinux,WebサーバにはNginxを使用しています。

Certbotをインストール

Certbotと諸々のパッケージをインストールします。
apk add  --no-cache --update  \
  python python-dev py-pip git wget vim \
  gcc musl-dev linux-headers \
  augeas-dev openssl-dev libffi-dev ca-certificates dialog \
  && rm -rf /var/cache/apk/*

nginxの設定ファイルを編集

今回はwebrootプラグインを使用して証明書の作成、更新を行うので ドメイン名/.well-knwon/acme-challengeのリクエストを受け取ったときに証明書のディレクトリを返すようにします。
http {

	
	server {
	  listen 80;
          location /.well-known/acme-challenge {
              default_type "text/plain";
              root   /etc/letsencrypt;
          }

	      location / {
	        proxy_pass YOUR_SERVER;
	        proxy_http_version 1.1;
	        proxy_set_header Upgrade $http_upgrade;
	        proxy_set_header Connection 'upgrade';
	        proxy_set_header Host $host;
	        proxy_cache_bypass $http_upgrade;
	      }
	}

     server {
        listen 443 ssl;
        server_name ドメイン名;
        ssl_certificate /etc/letsencrypt/live/ドメイン名/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/ドメイン名/privkey.pem;
        location / {
	        proxy_pass YOUR_SERVER;
        }
    }
}

SSL/TLS サーバ証明書の取得

certbotを使用すると秘密鍵・公開鍵・署名リクエスト(CSR)を手動で生成する必要はありません。これらの作業は、Certbot クライアントが自動的に行います。
certbot certonly  --webroot -w /etc/letsencrypt \
  -d ドメイン名 -m メールアドレス --agree-tos -n

証明書の更新を自動で行う

証明書の有効期限は90日なのでそれまでに更新する必要があるのでcronを使って定期的に更新を行います。

$ crontab e
# 毎日午前2時に更新を行う
# min hour day month weekday command
  0   2    *  *     *        certbot renew

Related Contents

Pickup Contents