Let's Encrypt SSL 証明書の自動更新、Cron 不要 — OpenResty Edge
OpenResty Edge は Let’s Encrypt SSL 証明書の更新をエンドツーエンドで自動化します。有効期限の約 1 か月前に次回更新をスケジュールし、reload や restart なしで新しい証明書をすべてのゲートウェイクラスターに配信し、証明書の有効期限が近づくと(残り 30 日以下)コンソールで通知します——cron ジョブも shell スクリプトも不要です。本記事では、ドメインの追加から実際のゲートウェイでの HTTPS 検証までの全工程をご紹介いたします。
Edge アプリケーションにドメインを追加する
いつものように、OpenResty Edge の Admin Web コンソールにアクセスしましょう。これはコンソールのサンプルデプロイメントです。各ユーザーは独自のローカルデプロイメントを持っています。
今回も test-edge.com ドメインのサンプルアプリケーションを使用します。
すでに SSL 用に 443 ポートでリッスンしていることがわかります。
このアプリケーションに入ります。
ここでは、サブドメインを使用してデモを行いたいので、まずアプリケーションの設定を調整する必要があります。
このアプリケーションに新しいワイルドカードドメインを追加しましょう。
保存します。
次に、ゲートウェイサーバーにプッシュします。Let’s Encrypt サーバーがドメインの所有権を確認する必要があるためです。
変更をリリースします。
リリースします!
Let’s Encrypt SSL 証明書を発行し、自動更新する
SSL ページに移動します。
現時点では SSL 証明書が定義されていないことがわかります。
新しい証明書を追加しましょう。
新しい SSL 証明書を発行するためのさまざまな方法をサポートしています。
他の CA から発行済みの証明書をお持ちの場合は、代わりに既存の SSL 証明書を Edge にアップロードして発行プロセスを丸ごとスキップすることもできます。
ここでは Let’s Encrypt の方法のみをデモンストレーションします。
トップレベルドメイン test-edge.com をこの証明書に追加します。
さらにサブドメイン名を追加します。
api サブドメインを入力します。これは何でも構いません。
さらにサブドメインを追加することもできます。
多数のドメインがある場合は、一括入力モードを使用することもできます。
ここで必要なドメイン名を 1 行ずつ入力できます。
一括入力モードを終了します。
ここにあるすべてのドメインは、この OpenResty Edge デプロイメントのゲートウェイサーバーに解決される必要があります。
この要件についてもここで言及されています。
ターミナルでは、dig コマンドを使用してドメインがゲートウェイサーバーに解決されているかどうかをテストできます。
dig test-edge.com
有効な DNS 応答が表示されます。
api サブドメインもテストできます。
dig api.test-edge.com
同様に有効な DNS 応答が得られます。
Let’s Encrypt サーバーは、これらのドメインを通じてゲートウェイサーバーにアクセスする必要があります。これは、私たちが実際にこれらのドメインを所有していることを確認する必要があるためです。
ワイルドカードドメインの場合、OpenResty Edge をドメインの権威 DNS ネームサーバーとして使用する必要もあります。
Let’s Encrypt 利用規約に同意します。
保存します。
新しい Let’s Encrypt 証明書が表示されます。
証明書の発行元は Let’s Encrypt です。
予想通り、2 つのドメインがあります。
ここでリアルタイムのステータスを確認できます。
このステータスアイコンをクリックして詳細な進捗状況を確認します。
Let’s Encrypt 証明書の発行プロセスに関する詳細なログもここで確認できます。
証明書が発行されたことが確認できます。
このステータスページを終了しましょう。
この列で新しい証明書の有効期限を確認できます。
この証明書は 3 ヶ月後に期限切れになります。
OpenResty Edge は、将来証明書の期限が近づいたときに自動的に更新します。
次回の更新が 2 ヶ月後に予定されていることがわかります。つまり、期限切れの 1 ヶ月前です。
既存の Let’s Encrypt 証明書も編集可能です。
ここでは変更を加えません。
または、この証明書を削除することもできます。
今は削除したくありません。
ただし、削除せずに無効にすることはできます。
その後、再び有効にすることもできます。
新しい証明書をプッシュするために、いつものように新しいバージョンをリリースする必要があります。
このボタンをクリックします。
リリースします!
これで完了です!
新しい証明書がすべてのゲートウェイクラスターとサーバーにプッシュされました。
設定の変更にはサーバーのリロード、再起動、またはサーバープロセスのバイナリアップグレードは必要ありません。そのため、非常に効率的でスケーラブルです。
その後、OpenResty Edge は、これらの証明書が期限切れになる前に Let’s Encrypt からの証明書を自動的に再度更新します。
何らかの理由で一部の証明書が更新されなかった場合、有効期限が近づくと(残り 30 日以下)、ユーザーはコンソールでこのような通知を目にします。
更新の概要: OpenResty Edge は証明書の有効期限と次回更新のタイムスタンプを管理コンソールに保存し、有効期限の約 1 か月前に Let’s Encrypt への新規発行を開始し、reload、restart、バイナリアップグレードのいずれも行わずに新しい証明書をすべてのゲートウェイクラスターに配信します。証明書の有効期限が近づくと(残り 30 日以下)コンソールに通知が表示されるため、証明書が静かに期限切れになることはありません。
ゲートウェイで HTTPS と Let’s Encrypt 証明書を検証する
新しいブラウザタブを開き、https を使用して test-edge.com ウェブサイトにアクセスしてみましょう。
成功しました!
api サブドメインもテストしてみます。
これも機能しています!
ターミナルで、ゲートウェイクラスターサーバーを使用して新しい証明書をテストすることもできます。
サンフランシスコ近くのゲートウェイサーバーを選択します。
133 で終わるパブリック IP アドレスをコピーします。
ターミナルで、このゲートウェイサーバーに HTTPS リクエストを送信できます。
curl -I --resolve 'test-edge.com:443:138.68.231.133' https://test-edge.com/
成功しました!
-v オプションを使用して、より詳細な情報を取得することもできます。
curl -I --resolve 'test-edge.com:443:138.68.231.133' https://test-edge.com/ -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、LuaJIT、GDB、SystemTap、LLVM、Perl など、複数のオープンソースプロジェクトに累計 100 万行以上のコードを寄与し、60 以上のオープンソースソフトウェアライブラリを執筆しております。
翻訳
英文版の原文と日本語訳版(本文)をご用意しております。読者の皆様による他の言語への翻訳版も歓迎いたします。全文翻訳で省略がなければ、採用を検討させていただきます。心より感謝申し上げます!

















































































