Azure AD のトークン署名証明書ロールオーバー

こんにちは。Windows プラット フォームサポートチームの三浦です。

今回は Azure AD のトークン署名の証明書が更新される件についてのお知らせです。
すでに詳細な情報が以下のように公開されていますが、本ブログでも改めてご紹介します。

Azure Active Directory の署名キーのロールオーバー
https://azure.microsoft.com/ja-jp/documentation/articles/active-directory-signing-key-rollover/

 

2016/9/13 更新: 2016/8/15 に Azure AD のトークン署名証明書のロールオーバーは実施済みです。以降は基本的に 6 週間おきにロールオーバーを実施することを予定しています。なお、 2016/7/16 や 2016/8/2 に送信されたメールについては、以降のロールオーバーのタイミングでは送信されない予定です。

 

証明書更新の通知メールと確認手順

2016 年 7 月 16 日 (*1) に Azure Team から "ご対応のお願い: お客様が開発されたアプリ用の Azure Active Directory 証明書の更新について" というタイトルで Azure AD 証明書ロールオーバーの影響を受ける可能性があるサイトの管理者にメールが送信されています。このメールは影響を受ける可能性があるサイトの管理者に対して送信されていますが、後から述べますように必ずしも対処が必要なわけではありません。まずは、メールにも記載されています以下の手順で影響を受ける可能性があるアプリケーションの確認をお願いします。

*1 2016 年 8 月 2 日に "最終のお知らせ - ご対応のお願い: お客様が開発されたアプリ用の Azure Active Directory 署名キーの更新について" というタイトルでメールが送信されています。

  1. 管理者のアカウントを使用して Azure クラシック ポータル (https://manage.windowsazure.com) へサインインします。
  2. [Active Directory] を開き、ディレクトリを選択します。
  3. "アプリケーション" をクリックし、 [表示] ドロップダウン メニューから [自分の会社が所有するアプリケーション] を選択し、右のチェックマークをオンにしてフィルターを適用します。

AzurePortal

上の画像の例では Azure AD Domain Services Sync (Preview 版の Azure AD DS を有効にしている場合に追加されます。対処は不要です)、WebApplication1 というアプリケーションが登録されている状態です。WebApplication1 は、Azure のギャラリーに存在するアプリケーションではなく、独自に開発されたアプリケーションですので、 WebApplication1 の開発者に Azure AD の署名キーのロールオーバーに対応しているかの確認を実施します。

 

Office 365 を利用しており、Azure を利用していないテナントでもこのメールの通知を受け取る可能性があります。Office 365 のメールなどのサービスは、今回の証明書の更新の影響を受けることはありません。しかし、テナントによっては Third Party のソフトウェアが Azure AD と統合している可能性がありますので、この場合も上記の手順での確認を実施ください。ただし、Office 365 をご利用の管理者が初めて Azure ポータルを使用する際には、 Azure AD のサブスクリプション登録が必要です。サブスクリプションを登録していない場合には、以下のサイトにあります手順を実施の上、 Azure ポータルにサインインをお願いします。

無料の Azure Active Directory サブスクリプションの登録
https://technet.microsoft.com/ja-jp/library/dn832618.aspx

 

Azure AD のトークン署名証明書 Azure AD を利用する目的の一つとして、 Azure AD とアプリケーションを連携させ、シングル サインオンを実現させること、Azure AD に登録されているアカウント情報を使用することが挙げられます。この動作の裏では Azure AD がトークンを発行し、各アプリケーションがそのトークンを利用するという処理が行われています。トークンには Azure AD のトークン署名証明書の秘密キーを利用した署名が付与されていますが、アプリケーションの動作によっては、その付与されている署名を検証するという処理を行います。Azure AD のトークン署名証明書は、フェデレーション メタデータに含まれており、トークン署名を検証するアプリケーションは、フェデレーション メタデータに含まれる証明書の情報を利用します。

 

今回実施を予定していること
トークン検証処理で利用される Azure AD のトークン署名証明書が 2016 年 8 月 15 日に更新される予定です。
また、これ以降も 6 週間ごと (今後変更される可能性があります) に更新される予定です。

トークン署名証明書が更新されることにより、その古い証明書を固定して利用するように構成されているアプリケーションでは、 Azure AD との連携が正常に動作しなくなります。 Azure AD と連携しているアプリケーションが、推奨されているように証明書が更新されても自動的に対応するように設計されていれば特に影響は生じません。

 

影響を受けないケース
以下に合致するアプリケーションであれば Azure AD でアプリケーション登録をしている場合も影響を受けませんので対策は不要です。

a. Azure のギャラリーから追加したアプリケーション
b. Azure Application Proxy で公開しているアプリケーション
c. Azure AD から受け取ったトークンを検証しないアプリケーション
d. トークン署名証明書の自動更新に対応するように構成されたアプリケーション

a の Azure ギャラリーとは、主に Third Party の Azure AD と連携が可能なアプリケーションの一覧で https://azure.microsoft.com/ja-jp/marketplace/active-directory/ から確認できます。

例えば以下は Azure AD とConcur を統合する手順ですが、これも Azure のギャラリーから追加するものですので、このような手順でアプリケーションを統合している場合には今回のロールオーバーの影響は受けません。

チュートリアル: Azure Active Directory と Concur の統合
https://azure.microsoft.com/ja-jp/documentation/articles/active-directory-saas-concur-tutorial/

c および d については、アプリケーションの実装次第ですので、これはアプリケーションの開発者に確認が必要です。

 

影響を受けるケース
影響を受けないケースとして挙げました a ~ d 以外のアプリケーション、つまり Azure AD に登録されている、 Azure AD のトークン署名証明書を明示的に指定して読み込んでいる、 Azure AD から発行された署名を検証するように構成されている、以上を満たすアプリケーションは影響を受ける可能性があります。Azure AD から発行されたトークン署名を検証する処理については、次の資料が参考になります。

Azure AD を使った API 開発 (access token の verify)
https://blogs.msdn.microsoft.com/tsmatsuz/2015/02/17/azure-ad-service-access-token-validation-check/

v2.0 endpoint の OAuth Token の検証 (Verify)
https://blogs.msdn.microsoft.com/tsmatsuz/2016/03/08/azure-ad-msa-v2-endpoint-validate-id_token/

 

対応策
影響を受ける可能性があることがわかりましたら、アプリケーションの開発元にトークン署名を利用しているか、その場合はトークン署名証明書の自動更新に対応している状態であるかの確認が必要です。なお、事前に利用する署名証明書を更新し、挙動を確認する方法があります。アプリケーションが実際には対応出来ていない場合には、ダウンタイムが生じますので、運用中のアプリケーションの場合には、ご注意ください。

 

1. 以下のリンクからファイルをダウンロードします。
https://github.com/AzureAD/azure-activedirectory-powershell-tokenkey/archive/master.zip

2. PowerShell を起動します。

3. 1 でダウンロードしたファイルを展開したフォルダをカレント ディレクトリにします。

4. 次のコマンドを実行し、 AADGraph モジュールをインストールします。
.\install-aadGraphModule.ps1

5. 次のコマンドを実行し、指定したアプリケーションで新しい Azure AD トークン署名証明書を利用するようにします。
.\UpdateThumbprint-RollForward.ps1

コマンドを実行すると Azure のアカウントの入力を求められますので、全体管理者の権限を持つアカウントを入力します。
その後、クライアント ID の入力を求められますので、テストするアプリケーションのクライアント ID を入力します。
アプリケーションのクライアント ID は、 Azure ポータルの Active Directory の構成情報から確認できます。

コマンドが成功すると preferredTokenSigningKeyThumbprint : 61b44041161c13f9a8b56549287af02c16ddffdb と表示されます。

6. 利用する証明書が更新された状態となりますので、アプリケーションをテストします。

7. テストが完了しましたら必ず次のコマンドを実行して元に戻します。
.\UpdateThumbprint-RestoreDefaultBehavior.ps1

このとき 5 と同様に Azure のアカウントやクライアント ID の情報を入力します。
preferredTokenSigningKeyThumbprint : unused となりましたらコマンドが成功した状態です。

 

その他、対応策の詳細については、上記 Azure Active Directory の署名キーのロールオーバー の情報を確認ください。また、この情報は随時更新されていますので、日本語への翻訳も随時行っておりますが、最新の情報は念のために英語の記事も参照ください (2016/7/18 に英語版が更新されています)。
それ以外に参考になる記事も紹介します。

Hey #AzureAD App Devs! We’re going to roll our certs on 5/23
https://blogs.technet.microsoft.com/enterprisemobility/2016/05/12/hey-azuread-app-devs-were-going-to-roll-our-certs-on-523/

#AzureAD: Postponing our planned certificate roll
https://blogs.technet.microsoft.com/enterprisemobility/2016/05/21/azuread-postponing-our-planned-certificate-roll/

Upcoming Azure Active Directory certificate rollover: August 15, 2016
https://azure.microsoft.com/ja-jp/blog/upcoming-azure-active-directory-certificate-rollover-august-15-2016/

 

補足

リンクにある情報にも記載されていますが、例えば Visual Studio 2015 を利用してアプリケーションを作成した場合には、特に何も考えなくても自動更新に対応している状態です。(Azure Active Directory の署名キーのロールオーバーにも記載のとおり、キーのロールオーバーに自動的に対処する上で必要なロジックが組み込まれています)
では、本当にそうなのかは、 Visual Studio 2015 の場合でもアプリケーションの Startup.cs または Startup.Auth.cs に new OpenIDConnectAuthenticationOptions というものが含まれているかなどの方法で確認できます。

VS2015

 

では、こういった開発ツールの機能を利用しておらず、手動で利用する証明書を更新する場合ですが、その場合には、フェデレーション メタデータに公開されている証明書を確認する必要があります。Azure Active Directory の署名キーのロールオーバーのリンクにも "その他のライブラリを使用した Web アプリケーション/API またはサポートされているプロトコルを手動で実装した Web アプリケーション/API" としてまとめられていますが、補足します。

フェデレーション メタデータには、現在のトークン署名証明書と 8 月 15 日以降にトークン署名に利用されるトークン署名証明書の両方がすでに掲載されています。フェデレーション メタデータは、https://login.microsoftonline.com/<テナント ID>/federationmetadata/2007-06/federationmetadata.xml ですが、実際の URL は、次の順番で確認できます。

  1. Azure ポータルを開きます。
  2. Active Directory を開き (この時点で以前のポータル画面にリダイレクトされます)、ディレクトリを開きます。
  3. アプリケーションを開き、画面下部にある "エンド ポイントの表示" をクリックします。

VS20152

ポップアップ ウィンドウの一番上にある "フェデレーション メタデータ ドキュメント" がフェデレーション メタデータです。このリンクをコピーし、ブラウザで表示することができます。

フェデレーション メタデータに含まれる次の情報を見ていきます。

-<RoleDescriptor xmlns:fed="https://docs.oasis-open.org/wsfed/federation/200706" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" protocolSupportEnumeration="https://docs.oasis-open.org/wsfed/federation/200706" xsi:type="fed:SecurityTokenServiceType">
-<KeyDescriptor use="signing">
-<KeyInfo xmlns="https://www.w3.org/2000/09/xmldsig#">
-<X509Data>
<X509Certificate>MIIC4jCCAcqg・・・</X509Certificate>
</X509Data>
</KeyInfo>
</KeyDescriptor>
-<KeyDescriptor use="signing">
-<KeyInfo xmlns="https://www.w3.org/2000/09/xmldsig#">
-<X509Data>
<X509Certificate>MIIC4jCCAcqg・・・</X509Certificate>
</X509Data>
</KeyInfo>
</KeyDescriptor>

この上記の情報のうち <X509Certificate> と </X509Certificate> で囲まれた情報が 2 つあります。これが現在と 8 月 15 日以降のトークン署名証明書です。

<X509Certificate> と </X509Certificate> で囲まれた情報をコピーし、テキスト ファイルに貼り付けます。そのファイルの拡張子を .cer にすると証明書ファイルになりますので、このファイルをダブルクリックすることで中身を確認できます。有効期間が 2014/10 に始まっているものが現在の、 2016/04 から始まっているのが更新予定の証明書です。キーの自動更新に対応していないアプリケーションでは、8 月 15 日以降に 2016/04 から有効期間が開始されている cer ファイルを読み込むように更新します。