AWS EC2に無料SSL(let’s encrypt)を設定する

はじめに

最近久しぶりに無料SSLの設定をしようとしたら、手順が更新されていたので備忘録として記事にしときます。

前提

  • AWS EC2のAmazonLinux2(CentOS 7)
  • NGINX
  • 独自ドメインを持っている
  • httpで正常に表示ができている

全体の流れ

certbotを使用して証明書の取得とインストールを行います。certbotをインストールするにはsnapというパッケージ管理システムを使う必要があるようです。さらにEC2にsnapをインストールするにはAmazonLinux2用のsnapdリポジトリを取得する必要があります。

導入手順

EC2にターミナルでログインしてコマンドでインストールを行っていきます。

snapdリポジトリを取得

# ディレクトリ移動
$ cd /etc/yum.repos.d/

# リポジトリ取得
$ sudo wget https://people.canonical.com/~mvo/snapd/amazon-linux2/snapd-amzn2.repo

AmazonLinux2ではEPELのリポジトリから取得できないようで、上記のカスタムリポジトリから取得する必要があるとの事です。

今後、EPELのリポジトリを参照しないように、 yumの設定ファイルを書き換えておく場合は、/etc/yum.conf に除外設定をしておく。

$ sudo vi /etc/yum.conf

# 以下を末尾に追加
exclude=snapd-*.el7 snap-*.el7

上記コマンドはvimというエディタを使って編集するものです。vimの使い方がわからない方はググってください。

snapd インストール

公式の手順に従います。

# snapd のインストール
$ sudo yum install snapd

# systemdユニットを有効にする
$ sudo systemctl enable --now snapd.socket

# シンボリックリンクを作成
$ sudo ln -s /var/lib/snapd/snap /snap

ここでターミナルを一旦ログアウトしてログインし直すかシステムを再起動します。

# core をインストール
$ sudo snap install core

# 最新にする
$ sudo snap refresh core

Certbot インストール

こちらも公式の手順に従います。

certbot-autoなど古いパッケージが残っている場合は先に削除しておきます。

# 削除
$ sudo yum remove certbot

インストール

# Certbot をインストール
$ sudo snap install --classic certbot

# シンボリックリンクを作成
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

証明書の取得とインストール

以下のコマンドで取得からインストール、NGINXの設定ファイルにSSL接続のための設定を書き込むまでしてくれます。(/etc/nginx/nginx.confが上書きされます)

# 証明書の取得とインストール
$ sudo certbot --nginx

# 証明書を取得するだけの場合
$ sudo certbot certonly --nginx

メールアドレス、証明書を発行するドメインなど聞かれるので指示に従って入力をします。

自動更新をテストする

$ sudo certbot renew --dry-run

証明書の更新について 

公式サイトによると、Certbot パッケージには期限切れになる前に自動的に更新をする機能が付属していて、以下のいずれかに更新コマンドがインストールされるとあります。

  • /etc/crontab/
  • /etc/cron.*/*
  • systemctl list-timers

自分の環境では、cron関連には設定されておらず、Systemd timerに設定されているっぽい。(/etc/systemd/system にCertbot関連が追加されていた)

ある記事では、自分でcron設定をしないと自動更新されないという情報もあるので、その辺りは様子見です。

まとめ

無料のSSL証明書の取得と設定の方法、毎回思うのですが、もっと簡単にできるようにならないんでしょうかね。手順も変更になる事もあるので毎回調べて設定しなければいけないので、結構めんどくさいですよね。