OpenResty Edge は Let’s Encrypt SSL 証明書の更新をエンドツーエンドで自動化します。有効期限の約 1 か月前に次回更新をスケジュールし、reload や restart なしで新しい証明書をすべてのゲートウェイクラスターに配信し、証明書の有効期限が近づくと(残り 30 日以下)コンソールで通知します——cron ジョブも shell スクリプトも不要です。本記事では、ドメインの追加から実際のゲートウェイでの HTTPS 検証までの全工程をご紹介いたします。

Let’s Encrypt 認証局のロゴ

Edge アプリケーションにドメインを追加する

いつものように、OpenResty Edge の Admin Web コンソールにアクセスしましょう。これはコンソールのサンプルデプロイメントです。各ユーザーは独自のローカルデプロイメントを持っています。

今回も test-edge.com ドメインのサンプルアプリケーションを使用します。

OpenResty Edge 管理コンソールに表示されたサンプルアプリケーション

すでに SSL 用に 443 ポートでリッスンしていることがわかります。

サンプルアプリケーションが SSL 用に 443 ポートでリッスン中

このアプリケーションに入ります。

OpenResty Edge 管理コンソールでサンプルアプリケーションに入る

ここでは、サブドメインを使用してデモを行いたいので、まずアプリケーションの設定を調整する必要があります。

OpenResty Edge のアプリケーション設定ページ

このアプリケーションに新しいワイルドカードドメインを追加しましょう。

Edge アプリケーションに新しいワイルドカードドメインを追加する

Edge アプリケーションのワイルドカードドメインフォームに入力済み

保存します。

ワイルドカードドメインが Edge アプリケーションに保存された

次に、ゲートウェイサーバーにプッシュします。Let’s Encrypt サーバーがドメインの所有権を確認する必要があるためです。

ドメイン変更をゲートウェイサーバーへプッシュする準備

変更をリリースします。

OpenResty Edge 管理コンソールで保留中の変更をリリースする

リリースします!

ドメイン変更をすべてのゲートウェイサーバーにリリース

Let’s Encrypt SSL 証明書を発行し、自動更新する

SSL ページに移動します。

OpenResty Edge の SSL 証明書ページへ移動

現時点では SSL 証明書が定義されていないことがわかります。

Let’s Encrypt 証明書を発行する前の空の SSL 証明書リスト

新しい証明書を追加しましょう。

OpenResty Edge で新しい SSL 証明書を追加する

新しい SSL 証明書を発行するためのさまざまな方法をサポートしています。

OpenResty Edge がサポートする SSL 証明書発行方法

他の CA から発行済みの証明書をお持ちの場合は、代わりに既存の SSL 証明書を Edge にアップロードして発行プロセスを丸ごとスキップすることもできます。

ここでは Let’s Encrypt の方法のみをデモンストレーションします。

SSL 証明書発行方法として Let’s Encrypt を選択

トップレベルドメイン test-edge.com をこの証明書に追加します。

Let’s Encrypt 証明書フォームに apex ドメイン test-edge.com を入力

さらにサブドメイン名を追加します。

Let’s Encrypt 証明書にサブドメインを追加

api サブドメインを入力します。これは何でも構いません。

Let’s Encrypt 証明書に api サブドメインを入力

さらにサブドメインを追加することもできます。

Let’s Encrypt 証明書にさらにサブドメインを追加

多数のドメインがある場合は、一括入力モードを使用することもできます。

一括入力モードに切り替え、複数のドメインを一度に入力

ここで必要なドメイン名を 1 行ずつ入力できます。

一括入力モードで複数のドメインを 1 行ずつ入力

一括入力モードを終了します。

ドメイン入力後に一括入力モードを終了

ここにあるすべてのドメインは、この OpenResty Edge デプロイメントのゲートウェイサーバーに解決される必要があります。

すべてのドメインが Edge ゲートウェイサーバーに解決される必要がある旨の注意

この要件についてもここで言及されています。

ドメインが Edge ゲートウェイサーバーに解決される必要がある旨の再度の注意

ターミナルでは、dig コマンドを使用してドメインがゲートウェイサーバーに解決されているかどうかをテストできます。

dig test-edge.com

有効な DNS 応答が表示されます。

dig 出力で test-edge.com が Edge ゲートウェイに解決されていることを確認

api サブドメインもテストできます。

dig api.test-edge.com

同様に有効な DNS 応答が得られます。

dig 出力で api.test-edge.com が Edge ゲートウェイに解決されていることを確認

Let’s Encrypt サーバーは、これらのドメインを通じてゲートウェイサーバーにアクセスする必要があります。これは、私たちが実際にこれらのドメインを所有していることを確認する必要があるためです。

Let’s Encrypt の検証フローが Edge ゲートウェイサーバーにアクセスする様子

ワイルドカードドメインの場合、OpenResty Edge をドメインの権威 DNS ネームサーバーとして使用する必要もあります。

OpenResty Edge がワイルドカードドメインの権威 DNS サーバーとして機能する様子

Let’s Encrypt 利用規約に同意します。

Let’s Encrypt 利用規約に同意する

保存します。

新しい Let’s Encrypt 証明書の設定を保存する

新しい Let’s Encrypt 証明書が表示されます。

SSL ページに新しい Let’s Encrypt 証明書の行が表示される

証明書の発行元は Let’s Encrypt です。

証明書の発行元列に Let’s Encrypt が表示される

予想通り、2 つのドメインがあります。

証明書の行に設定された 2 つのドメインが表示される

ここでリアルタイムのステータスを確認できます。

Let’s Encrypt 証明書発行のリアルタイムステータス

このステータスアイコンをクリックして詳細な進捗状況を確認します。

Let’s Encrypt 証明書の発行プロセスに関する詳細なログもここで確認できます。

Let’s Encrypt 証明書発行プロセスの詳細ログ

証明書が発行されたことが確認できます。

Let’s Encrypt 証明書が正常に発行されたことの確認

このステータスページを終了しましょう。

証明書ステータスページを終了する

この列で新しい証明書の有効期限を確認できます。

新しい Let’s Encrypt 証明書の有効期限列

この証明書は 3 ヶ月後に期限切れになります。

Let’s Encrypt の標準有効期間である 3 か月後に期限切れとなる証明書

OpenResty Edge は、将来証明書の期限が近づいたときに自動的に更新します。

OpenResty Edge が期限切れ前に自動で証明書を更新するようにスケジュール済み

次回の更新が 2 ヶ月後に予定されていることがわかります。つまり、期限切れの 1 ヶ月前です。

次回更新は 2 か月後、証明書の有効期限の 1 か月前にスケジュール

既存の Let’s Encrypt 証明書も編集可能です。

OpenResty Edge で既存の Let’s Encrypt 証明書を編集する

ここでは変更を加えません。

変更なしの証明書編集ダイアログ

または、この証明書を削除することもできます。

Let’s Encrypt 証明書の削除オプション

今は削除したくありません。

証明書の削除をキャンセルする

ただし、削除せずに無効にすることはできます。

Let’s Encrypt 証明書を削除せずに無効化する

その後、再び有効にすることもできます。

以前に無効化した Let’s Encrypt 証明書を再度有効にする

新しい証明書をプッシュするために、いつものように新しいバージョンをリリースする必要があります。

証明書の変更を配信するための新しいリリースを準備する

このボタンをクリックします。

証明書をすべてのゲートウェイに配信するためのリリースボタン

リリースします!

証明書の変更をすべてのゲートウェイクラスターに配信

これで完了です!

証明書の変更がすべてのゲートウェイに正常に配信された

新しい証明書がすべてのゲートウェイクラスターとサーバーにプッシュされました。

新しい Let’s Encrypt 証明書がすべてのゲートウェイクラスターに展開された

設定の変更にはサーバーのリロード、再起動、またはサーバープロセスのバイナリアップグレードは必要ありません。そのため、非常に効率的でスケーラブルです。

OpenResty Edge の設定同期が reload なしで証明書を配信する様子

その後、OpenResty Edge は、これらの証明書が期限切れになる前に Let’s Encrypt からの証明書を自動的に再度更新します。

OpenResty Edge が有効期限前に Let’s Encrypt 証明書を自動更新する様子

何らかの理由で一部の証明書が更新されなかった場合、有効期限が近づくと(残り 30 日以下)、ユーザーはコンソールでこのような通知を目にします。

証明書の有効期限が近づいたとき(残り 30 日以下)のコンソール通知

更新の概要: OpenResty Edge は証明書の有効期限と次回更新のタイムスタンプを管理コンソールに保存し、有効期限の約 1 か月前に Let’s Encrypt への新規発行を開始し、reload、restart、バイナリアップグレードのいずれも行わずに新しい証明書をすべてのゲートウェイクラスターに配信します。証明書の有効期限が近づくと(残り 30 日以下)コンソールに通知が表示されるため、証明書が静かに期限切れになることはありません。

ゲートウェイで HTTPS と Let’s Encrypt 証明書を検証する

新しいブラウザタブを開き、https を使用して test-edge.com ウェブサイトにアクセスしてみましょう。

Let’s Encrypt 証明書を用いて HTTPS で test-edge.com を読み込むブラウザタブ

成功しました!

api サブドメインもテストしてみます。

Let’s Encrypt 証明書を用いて HTTPS で api.test-edge.com を読み込むブラウザタブ

これも機能しています!

ターミナルで、ゲートウェイクラスターサーバーを使用して新しい証明書をテストすることもできます。

ターミナルから証明書をテストするためにゲートウェイクラスターサーバーを選ぶ

サンフランシスコ近くのゲートウェイサーバーを選択します。

テスト用にサンフランシスコ近くのゲートウェイサーバーを選択

133 で終わるパブリック IP アドレスをコピーします。

133 で終わるゲートウェイサーバーのパブリック IP アドレスをコピー

ターミナルで、このゲートウェイサーバーに HTTPS リクエストを送信できます。

curl -I --resolve 'test-edge.com:443:138.68.231.133' https://test-edge.com/

curl -I の応答で Edge ゲートウェイサーバーに対する HTTPS が動作していることを確認

成功しました!

-v オプションを使用して、より詳細な情報を取得することもできます。

curl -I --resolve 'test-edge.com:443:138.68.231.133' https://test-edge.com/ -v

このコマンドを実行します。

curl -v 出力で Edge ゲートウェイとの完全な HTTPS ハンドシェイクを表示

ここで実際にサーバー証明書を確認できます。また、この証明書が確かに Let’s Encrypt によって発行されたものであることも確認できます。

curl -v 出力で Let’s Encrypt が発行したサーバー証明書を表示

ブラウザとゲートウェイの双方で HTTPS が動作している状態になれば、次の自然なステップは Edge のページルールですべての平文 HTTP リクエストを HTTPS へリダイレクトし、訪問者が暗号化されていないサイトに到達しないようにすることです。

よくある質問

OpenResty Edge はいつ Let’s Encrypt 証明書を更新しますか?

Edge は証明書の有効期限の約 1 か月前に次回更新をスケジュールします。Let’s Encrypt 証明書の有効期間は 3 か月であるため、発行から次回更新まで約 2 か月の余裕があり、その日時は証明書行の「次回更新」列で確認できます。

証明書を更新するために cron ジョブやスクリプトは必要ですか?

不要です。更新は Edge 内部で処理されます——設定すべき cron ジョブも、スケジュールする certbot バイナリも、書くべき shell フックもありません。更新のタイムスタンプは管理コンソールの証明書の横に保存されます。ZeroSSL、DigiCert、Google Trust Services などの他の CA から発行する必要がある場合も、Edge のより広範な ACME プロトコルによる SSL 証明書自動化は同じくノーメンテナンスで動作します。

証明書の更新にはゲートウェイのリロードや再起動が必要ですか?

不要です。Edge が更新された Let’s Encrypt 証明書を発行すると、Edge の設定同期レイヤーを通じてすべてのゲートウェイクラスターとサーバーに reload、restart、バイナリアップグレードを一切行わずに配信されます。この「リリース」手順については、記事末尾の SSL セクションで詳しく説明しています。

自動更新が失敗した場合はどうなりますか?

Edge は現在、個々の更新失敗に対する通知は行いませんが、証明書の有効期限が近づくと(残り 30 日以下)コンソールに通知が表示されるため、証明書が静かに期限切れになることはありません。更新が失敗し続ける場合——たとえば Let’s Encrypt がいずれかのドメインにアクセスできなくなった場合——同じページから証明書を編集したり、ドメインを調整したり、削除して再発行することができます。

著者について

章亦春(Zhang Yichun)は、オープンソースの OpenResty® プロジェクトの創始者であり、OpenResty Inc. の CEO および創業者です。

章亦春(GitHub ID: agentzh)は中国江蘇省生まれで、現在は米国ベイエリアに在住しております。彼は中国における初期のオープンソース技術と文化の提唱者およびリーダーの一人であり、Cloudflare、Yahoo!、Alibaba など、国際的に有名なハイテク企業に勤務した経験があります。「エッジコンピューティング」、「動的トレーシング」、「機械プログラミング」 の先駆者であり、22 年以上のプログラミング経験と 16 年以上のオープンソース経験を持っております。世界中で 4000 万以上のドメイン名を持つユーザーを抱えるオープンソースプロジェクトのリーダーとして、彼は OpenResty® オープンソースプロジェクトをベースに、米国シリコンバレーの中心部にハイテク企業 OpenResty Inc. を設立いたしました。同社の主力製品である OpenResty XRay動的トレーシング技術を利用した非侵襲的な障害分析および排除ツール)と OpenResty Edge(マイクロサービスおよび分散トラフィックに最適化された多機能ゲートウェイソフトウェア)は、世界中の多くの上場企業および大企業から高い評価を得ております。OpenResty 以外にも、章亦春は Linux カーネル、Nginx、LuaJITGDBSystemTapLLVM、Perl など、複数のオープンソースプロジェクトに累計 100 万行以上のコードを寄与し、60 以上のオープンソースソフトウェアライブラリを執筆しております。

翻訳

英文版の原文と日本語訳版(本文)をご用意しております。読者の皆様による他の言語への翻訳版も歓迎いたします。全文翻訳で省略がなければ、採用を検討させていただきます。心より感謝申し上げます!