Azure App ServiceにLet's Encryptを導入する

常時HTTPSが主流になりつつあるので、Azure App Serviceで運用しているサイトもLet’s Encryptを使ってサクッとHTTPS化を済ませたいところです。

App Serviceには「Site Extentions」という機能を追加できる仕組みがあり、Let’s Encrypt用の機能拡張もGithubで開発されているものが使えるようになっています。

前提条件

App ServiceにLet’s Encryptを導入するには、以下の前提条件をクリアしている必要があります。

  • カスタムドメインを導入している(xxx.azurewebsites.net のまま使う場合はデフォルトで証明書が付いている)
  • Let’s Encryptが発行する証明書でOKである: 取得可能な SSL/TLS証明書の種類
  • Azure Active Directory(AAD)に、アプリ登録できる権限を持っていること(またはアプリ登録を依頼できる)

導入手順

詳細は、公式の導入手順の通りなのですが、いくつか重要となるポイントがあるので紹介します。
(なお、公式手順では一部クラシックポータルを利用するようになっていますが、通常のポータルのみで大丈夫です。)

Azure Active Directoryへのアプリ登録(サービスプリンシパルの取得)

[Azure Active Directory]-[アプリの登録]から[追加]でアプリを登録します。
[名前]は任意(この例ではLetsencrypt)、 [サインオンURL]は証明書を適用するサイトのURLを入れておきます。

[Azure Active Directory]に作成されたアプリを選択し、[アプリケーションID(クライアントID)]をコピーしてメモしておきます。

[設定]-[キー]で、キー(シークレット)を作成し保存します。必ず保存直後にキーの値をコピーしてメモしておきます(このタイミングしかコピーできないので注意)。

リソースグループへの権限登録

Azure Active Directoryで作成したアプリをリソースグループに権限登録します。
リソースグループはWebサイト(AppService)が属しているグループです。
もしAppServiceをホストしているAppServiceプランのリソースグループが異なる場合は、そのグループにも権限を登録する必要があります(ここはハマリやすいポイント)。

[リソースグループ]-[アクセス制御(IAM)]-[追加]で、役割を「共同作成者」にユーザをAADで登録したアプリケーションを選択します。

App Serviceへの拡張機能のインストール

事前準備が整ったので、AppServiceにLet’s Encrypt拡張機能をインストールしていきます。

[App Service]-[対象のAppService]-[拡張機能]で、[追加]から「Azure Let’s Encrypt (x64)」または「Azure Let’s Encrypt (x86)」を選択して導入します(32ビットか64ビットはアプリケーション設定で確認できます)。

Let’s Encrypt拡張機能の設定

[拡張機能]-[Azure Let’s Encrypt (x64)]で、[参照]をクリックするとLet’s Encryptの設定画面に遷移します。

設定画面の[Automated Installation (click to expand)]以下のフォームに必要事項を入力していきます。

[ClientId]にはAADのアプリ登録でメモした「アプリケーションID」を、[ClientSecret]には同じくメモした「キー」を
貼り付けます。それ以外の項目はポータルにて取得できます。

[NEXT]を実行すると確認画面が出るので、内容を確認して問題無ければ、さらに[NEXT]を実行します。

証明書を取得するホスト名を選択し、メールアドレスを入力、[Request and Install certificate]を実行します。ここでLet’ Encryptのサイトに申請が行われます。

証明書が発行されました!

証明書の適用

最後に発行された証明書をWebサイトに紐付けます。

Let’s Encrypt証明書の有効期間は90日間です。期限が近くなると、Let’s Encryptからメールが送られてくるので、再度管理画面で[Request and Install certificate]を実行すれば継続が完了します(自動更新にはまだ対応していないようです)。