BFT名古屋 TECH BLOG

日々の業務で得た知識を所属するエンジニアたちがアウトプットしていきます。

【SSL証明書更新】Light SailでLet’s Encrypt証明書を更新する仕組みについて調べてみた

こんにちは! 株式会社BFT名古屋支店、新米エンジニアのプリンです。

Webサイトの所有者にとって、SSL証明書の取得はいまや当たり前となっていますよね。
そんななかで、よく使われているのがLet’s Encryptです。

私が現在参加しているプロジェクトで使用しているLight SailもLet’s Encryptを使ってSSL証明書を取得しています。
※Light Sailとは、VPS(Virtual Private Server)を使用できるAWSのサービスです。仮想サーバーを使えるという点ではEC2と同じですが、月額固定料金だったりパッケージになっているため簡単に使用できるところがEC2と違う点です。

そして、Let’s Encryptはなんと無料でSSL証明書が発行できます。

ですが証明書の有効期間が短く3カ月で切れてしまうため、そのたびにSSL証明書の更新が必要になります。
Let’s EncryptSSL証明書を取得したけど、90日ごとに毎回手動で更新するのちょっと手間だなあ」ということで、自動更新する方法を調べてみました。


Let’s Encryptの証明書発行の仕組み

Let’s Encryptで証明書を発行または更新する際には、そのドメインの所有者であることをLet’s Encrypt証明局に対して証明する必要があります。

証明方法は主にHTTPチャレンジとDNSチャレンジの2つがあり、そのどちらかを選んでチャレンジを行います。
それぞれの認証方法の簡単な内容は以下の通りです。

HTTPチャレンジ
①Let's Encryptから送られてくる認証用のトークンをACMEクライアントがWebサーバに配置する。
ACME クライアント:証明書の管理を自動化するためのプロトコル
②Let's EncryptがそのファイルにHTTPでアクセスしてトークンが正しいか確認する。
③正しければ証明書が発行される

DNSチャレンジ
①Let's Encryptから送られてくる認証用のトークンをDNSレコードにTXTレコードとして登録する
②Let's EncryptがTXTレコードを確認する
③登録された内容が正しければ証明書が発行される
参考: 動作の仕組み - Let's Encrypt - フリーな SSL/TLS 証明書

HTTP認証で問題となるのが以下の部分です。

HTTP-01 チャレンジは 80 番ポートでのみ実行可能です。

引用:チャレンジの種類 - Let's Encrypt - フリーな SSL/TLS 証明書
すなわち、HTTPを許可していないとLet's Encryptがトークンのあるファイルにアクセスできずこのチャレンジは失敗します。
また、HTTPにIP制限をつけていても同様に失敗します。

Light sail公式ドキュメントではbncert-toolを使用した方法が推奨されていますが、bncert-toolはHTTP認証を使用して証明書の発行・更新を行うためアクセス元IP制限つきのサーバーでは認証に失敗してしまうという注意点があります。

アクセス元IP制限つきLightSailでLet’s Encrypt証明書自動更新するには?

さて、ではアクセス元IP制限つきのLightSailでLet’s Encryptの証明書を自動更新するにはどうしたらいいのでしょうか。
今回、私が自動更新設定をしたかったLight Sailはアクセス元IP制限つきだったので、いろいろと調べてみました。

最初に考えたのは、Let's Encryptの送信元IPのみを追加で許可すればいいのではないかということです。
しかし、この方法はLet's EncryptがIP情報を公開していなかったため不可能でした。

かといってセキュリティ上、HTTPをフルオープンにするわけにもいかないので、次にDNS認証を使った自動更新の方法がないか調べてみましたが手間がかかりそうだったこともあり、今回は自動更新を行わないことにしました。

Let's Encryptさんが公式でDNS認証を使った自動更新方法をサポートしてくれる日が来たらいいなあと思います。

ここまで読んでいただき、ありがとうございました!