この記事では、UbuntuでLegoを使ってSSL証明書を作成する方法をご紹介します。
以前記事を書きました、『UbuntuにNginxをインストールして独自ドメインでアクセスする方法』をHTTPS化する続編になります。
あわせて読みたい


UbuntuにNginxをインストールして独自ドメインでアクセスする方法
この記事では、UbuntuにNginxをインストールする方法をご紹介します。 【インストール】 パッケージをインストールします。 $ sudo apt install nginx Nginxの起動を確…
Legoのインストール
LegoはSSL証明書を作成するためのツールです公式サイトからバイナリファイルをダンロードします。
実行ファイルをダウンロードします。
$ cd ~/
$ wget https://github.com/go-acme/lego/releases/download/v4.8.0/lego_v4.8.0_linux_amd64.tar.gz
ダウンロードしたファイルを解凍します。
sudo tar zxf lego_v4.8.0_linux_amd64.tar.gz
/usr/local/binあたりに移動します。
sudo mv lego /usr/local/bin
実際にlegoを実行してバージョンが表示されるか確認します。
$ /usr/local/bin/lego -v
lego version 4.8.0 linux/amd64
次に、SSH証明書を作成するコマンドを作成します。<your document root> <your domain> <your email address> の部分は自身の環境に置き換えてください。
$ sudo /usr/local/bin/lego --accept-tos \
--path "/etc/lego" \
--http \
--http.webroot "<your document root>" \
--domains "<your domain>" \
--email "<your email address>" \
run
実行が完了すると/etc/lego/certificatesに証明書関連のファイルが作成されるので確認します。
$ sudo ls /etc/lego/certificates
ubuntu.hitori-josys.me.crt ubuntu.hitori-josys.me.json
ubuntu.hitori-josys.me.issuer.crt ubuntu.hitori-josys.me.key
無事作成が確認できたらNginxの設定ファイルを開きます。
$ sudo vi /etc/nginx/sites-available/ubuntu.hitori-josys.me
前回の記事で書き込んだ設定を以下の設定に書き換えます。
server {
listen 80;
server_name ubuntu.hitori-josys.me; access_log /var/log/nginx/ubuntu.hitori-josys.me-access.log;
error_log /var/log/nginx/ubuntu.hitori-josys.me-error.log;
return 301https://$host$request_uri;
}
server {
listen 443 ssl;
server_name ubuntu.hitori-josys.me;
access_log /var/log/nginx/ubuntu.hitori-josys.me-access.log;
error_log /var/log/nginx/ubuntu.hitori-josys.me-error.log;
ssl_certificate /etc/lego/certificates/ubuntu.hitori-josys.me.crt;
ssl_certificate_key /etc/lego/certificates/ubuntu.hitori-josys.me.key;
> location / {
root /var/www/ubuntu.hitori-josys.me;
index index.html index.htm;
}
}
設定を保存したら設定内容をチェックします。
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
問題なければNginxをリロードして反映します。
$ sudo systemctl reload nginx
ブラウザで再度アクセスするとhttpsにリダイレクトされます。鍵マークが出ていれば完了です。

目次
SSL証明書の自動更新
最後にSSL証明書の期限が切れないよう、自動設定をしておきます。Cronに自動更新の設定を書き込みます。以下の例では毎月1日に自動更新を実行する場合です。
$ sudo vi /etc/cron.d/lego
0 0 1 * * /usr/local/bin/lego --path "/etc/lego" --http --http.webroot "<your document root>" --domains "<your domain>" --email "<your email address>" --renew-hook "/usr/bin/systemctl reload nginx"
設定反映のためCronを再起動します。
$ sudo systemctl restart cron