[さくらVPS] 無料SSL証明書 Let’s Encryptをインストールして、HTTPS設定を行う

HTTPで送受信されるデータは、平文のままネットワーク上を流れます。
そのため、データの内部を第三者に知られてしまう可能性があります。
安全にHTTPでデータを送受信するためには、HTTPS(HTTP over TLS/SSL)を使って、送受信されるデータを暗号化します。


参考
ネコでもわかる!さくらのVPS講座 ~第六回「無料SSL証明書 Let’s Encryptを導入しよう」 | さくらのナレッジ
Certbot - Centosrhel7 Nginx


前提として、ドメイン名を取得する必要があります。
こちらを参考にドメイン名を取得してください。
ネコでもわかる!さくらのVPS講座 ~第三回「Apacheをインストールしよう」 | さくらのナレッジ


Let’s Encryptのインストールします。

# yum install certbot python2-certbot-nginx


certbotコマンドを実行して証明書をインストールします。
いくつか質問されますので順番に答えます。

# certbot --nginx -d littlebets.biz


nginxの設定ファイル(/etc/nginx/nginx.conf)を修正します。

server {
      listen 80 default_server;
      listen [::]:80 default_server;

      return 301 https://$host$request_uri;
}

ユーザーがHTTPやHTTPSといったスキーム名を入力することは稀です。
HTTPリクエストがあった場合、HTTPSにリダイレクトするように設定します。
$xxxは、Nginxのビルトイン変数です。
$hostは、リクエストのURIのホスト名です。
$request_uriは、リクエストのURIです。


TCP 443ポートで、HTTPSを有効にしています。
ssl_dhparamは、以下のコマンドで作成します。
openssl dhparam 2048 -out /パス/dhparam.pem

server {
      listen 443 ssl http2;
      listen [::]:443 ssl http2;
      server_name littlebets.biz;

      ssl_certificate /etc/letsencrypt/live/littlebets.biz/fullchain.pem;
      ssl_certificate_key /etc/letsencrypt/live/littlebets.biz/privkey.pem;
      ssl_session_timeout 10m;
      ssl_session_cache shared:MozSSL:10m;
      ssl_session_tickets off;

      ssl_dhparam /etc/ssl/private/dhparam.pem;

      error_page 404 /404.html;
      error_page 500 502 503 504 /50x.html;

      location / {
         root /var/www/html;
         index index.html index.htm;
      }
   }

nginxを再起動します。

# systemctl restart nginx


Let's Encryptで取得したサーバ証明書は有効期限が90日となっています。
そのため、有効期限が切れる前に証明書の更新が必要となります。
crontabに登録するなど、自動的に更新すると楽です。

# crontab -u root -e
0 3 *  *  *  /usr/bin/certbot renew