メインコンテンツまでスキップ

NGINXとLet‘s Encryptを利用したHTTPSサーバの構築

· 約3分

NGINXにLet's Encryptで取得したサーバ証明書を適用し、HTTPSサーバを建てるための手順

必要なツールの準備

NGINXとLet's Encryptを利用した署名所作成ツール(certbot)のインストールを行う。

NGINXのインストール

yum install nginx

certbotのインストール

yum install certbot

証明書の取得

証明書の取得コマンド

証明書の取得をcertbotコマンドを利用して行う。
このコマンドは80番ポートでLet's Encrypt からの通信を待ち受け、必要な通信を行う。
certbot certonly --standalone -d <ドメイン名> -m <メールアドレス> --agree-tos -n

サーバのHTTPS化

NGINXの設定

NGINXにSSL設定と証明書鍵のファイルパスを記載する。

server {
..<中略>..
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate "/etc/letsencrypt/live/<Domain名>/fullchain.pem";
ssl_certificate_key "/etc/letsencrypt/live/<Domain名>/privkey.pem";
..<中略>..
}

上記設定後にNGINXを再起動し設定を反映する。
systemctl restart nginx

証明書の更新

証明書更新のための設定変更

Let's Encryptで取得した証明書の期間は90日と短いため、定期的に更新する必要がある。
しかし、80番ポートに関しては既にNGINXで利用しているため、取得時と同様にcertbotが80番ポートを利用することができない。
そのため、Let's Encryptの証明書更新に必要なファイルはHTTPでアクセスできる用にNGINXの設定ファイルを変更する。

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

location ^~/.well-known/acme-challenge/ {
default_type "text/plain";
}

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

それに合わせて、Let's Encryptの設定を変更する。

# Options used in the renewal process
[renewalparams]
authenticator = webroot
webroot_path = /usr/share/nginx/html,
[[webroot_map]]
<domain名> = /usr/share/nginx/html

疎通確認のため、以下のコマンドを実行しエラーが発生しないか確認する。
certbot renew --dry-run

証明書更新の自動化

月に一回anacronを利用して更新を行うようにする。
yum install cronie-anacron
systemctl enable anacron
vi /etc/cron.monthly/letsencrypt.sh

#!/bin/sh

certbot renew > /dev/null
wait
systemctl restart nginx

[参考サイト]