Ubuntu環境CertBotでLet's Encryptを利用しSSL化する

2021-02-16

前提

  • nginxがインストール済み
  • ポート番号の443が開放されている
  • test.example.com(ドメイン)のAレコードがサーバーのIPに設定されている
shell
1dig test.example.com
2test.example.com. 3600 IN A xxx.xxx.xxx.xxx
  • serverディレクトリでバーチャルホストの設定をしている(以下URL参考)

https://blog.junpeko.com/ubuntu-nginx-virtualhost

(こちらの記事で行っている設定により、http://test.example.comでアクセスできるようになります。)

snapdのインストール

snapdをインストールし、クラシックスナップサポートを有効にする必要がある。 (snap install --classic certbot)を実行するために、snapdをインストールする

snapとは、Ubuntuではディストリビューションをまたいで利用できるユニバーサルパッケージシステム

shell
1sudo apt update
2sudo apt install snapd

snapdのバージョンが最新であることを確認

shell
1sudo snap install core; sudo snap refresh core

Certbotのインストール

※ すでに、certbot-auto等のCertbot OSパッケージをインストールしている場合は削除してください。

apt remove パッケージ名

以下のコマンドでCertbotがインストールされます。

shell
1sudo snap install --classic certbot

certbotコマンドを利用しやすくするため、シンボリックリンクを作成

shell
1sudo ln -s /snap/bin/certbot /usr/bin/certbot

Certbotの実行

shell
1sudo certbot --nginx
shell
1 /etc/letsencrypt/live/junpeko.tech/fullchain.pem
2 Your key file has been saved at:
3 /etc/letsencrypt/live/junpeko.tech/privkey.pem

/etc/letsencrypt/live/junpeko.tech/fullchain.pem/etc/letsencrypt/live/junpeko.tech/privkey.pem が設置されます。

確認

URLをブラウザで確認してSSL化されているか確認します。

httpで接続したときに、httpsにリダイレクトする処理も入れてくれているようです。

証明書更新の自動化

補足

shell
1sudo vim /etc/nginx/sites-available/test.example.com

Certbotにより、追加された行には、# managed by Certbotのコメントが追記されていました。

1server {
2 server_name test.example.com;
3 root /var/www/html/test.example.com;
4 index index.html;
5 location / {
6 try_files $uri $uri/ =404;
7 }
8
9 listen [::]:443 ssl ipv6only=on; # managed by Certbot
10 listen 443 ssl; # managed by Certbot
11 ssl_certificate /etc/letsencrypt/live/test.example.com/fullchain.pem; # managed by Certbot
12 ssl_certificate_key /etc/letsencrypt/live/test.example.com/privkey.pem; # managed by Certbot
13 include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
14 ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
15
16}
17server {
18 if ($host = test.example.com) {
19 return 301 https://$host$request_uri;
20 } # managed by Certbot
21
22
23 listen 80;
24 listen [::]:80;
25 server_name test.example.com;
26 return 404; # managed by Certbot
27}

Tech Blog

avatar

ソフトウェアエンジニア。1989年生まれ大阪府岸和田市在住のフリーランス。PHP、バックエンド開発が得意。テニス、フットサル、だんじり、ケツメイシ、競馬、プログラミングが好き!最近はWebフロントエンド沼にハマってます!

Copyright © 2022. Junpeko5's Tech Blog