Azure App Service で TLS/SSL 証明書を追加および管理する
Note
2024 年 6 月 1 日より、新しく作成されたすべての App Service アプリには、名前付け規則 <app-name>-<random-hash>.<region>.azurewebsites.net
を使用して一意の既定のホスト名を生成するオプションが備わります。 既存のアプリ名は変更されません。
例: myapp-ds27dh7271aah175.westus-01.azurewebsites.net
詳しくは、App Service リソースの一意の既定のホスト名に関する記事をご覧ください。
アプリケーションのコードで使うための、またはカスタム DNS 名をセキュリティで保護するためのデジタル セキュリティ証明書を、Azure App Service で追加できます。これにより、高度にスケーラブルでパッチを自動的に適用する Web ホスティング サービスが提供されます。 現在、トランスポート層セキュリティ (TLS) 証明書 (旧称 Secure Socket Layer (SSL) 証明書) とも呼ばれるプライベートまたはパブリック証明書は、ブラウザー、アクセスする Web サイト、および Web サイト サーバーの間で送信されるデータを暗号化することで、インターネット接続をセキュリティ保護するのに役立ちます。
次の表は、App Service で証明書を追加するためのオプションの一覧です。
オプション | 説明 |
---|---|
無料の App Service マネージド証明書を作成します。 | App Service でのカスタム ドメインのセキュリティ強化だけが必要な場合に、使いやすい無料のプライベート証明書。 |
App Service 証明書をインポートする | Azure によって管理されるプライベート証明書。 自動証明書管理のシンプルさと、更新オプションとエクスポート オプションの柔軟性が組み合わされています。 |
Key Vault から証明書をインポートする | Azure Key Vault を使用して PKCS12 証明書を管理する場合に便利です。 「プライベート証明書の要件」を参照してください。 |
プライベート証明書のアップロード | 既にサードパーティ プロバイダーからのプライベート証明書がある場合は、それをアップロードすることができます。 「プライベート証明書の要件」を参照してください。 |
パブリック証明書のアップロード | パブリック証明書はカスタム ドメインのセキュリティ保護には使われませんが、リモート リソースにアクセスするために必要な場合は、コードに読み込むことができます。 |
前提条件
App Service アプリを作成します。 アプリの App Service プランは、Basic、Standard、Premium、または Isolated レベルである必要があります。 レベルを更新するには、アプリのスケールアップに関する記事を参照してください。
プライベート証明書の場合、App Service のすべての要件を満たしていることを確認します。
無料の証明書のみ:
証明書が必要なドメインを App Service にマップします。 詳細については、「チュートリアル: 既存のカスタム DNS 名を Azure App Service にマップする」をご覧ください。
ルート ドメイン (contoso.com など) の場合、アプリに IP 制限が構成されていないことを確認します。 ルート ドメインの証明書の作成と定期的な更新のどちらでも、インターネットからアプリにアクセスできる必要があります。
プライベート証明書の要件
無料の App Service マネージド証明書と App Service 証明書は、App Service の要件を既に満たしています。 App Service にプライベート証明書をアップロードまたはインポートする場合、証明書は次の要件を満たしている必要があります。
- パスワードで保護された PFX ファイルとしてエクスポートされ、Triple DES を使って暗号化されている
- 2048 ビット以上の長さの秘密キーが含まれます
- 証明書チェーン内のすべての中間証明書とルート証明書が含まれている
TLS バインドでカスタム ドメインをセキュリティ保護する場合は、証明書が次の追加要件を満たしている必要があります。
- サーバー認証用の拡張鍵使用が含まれている (OID = 1.3.6.1.5.5.7.3.1)
- 信頼された証明機関によって署名されている
Note
楕円曲線暗号 (ECC) 証明書 は、App Service で機能しますが、この記事では説明しません。 ECC 証明書を作成する正確な手順については、お使いの証明機関にお問い合わせください。
Note
アプリに追加されたプライベート証明書は、App Service プランのリソース グループ、リージョン、オペレーティング システムの組み合わせ (内部的には Web 空間 と呼ばれます) にバインドされたデプロイ ユニットに格納されます。 これにより、リソース グループ、リージョン、OS の組み合わせが同じである他のアプリが、証明書にアクセスできるようになります。 App Service にアップロードまたはインポートされたプライベート証明書は、同じデプロイ ユニット内の App Services と共有されます。
Web スペースあたり最大 1,000 個のプライベート証明書を追加できます。
無料のマネージド証明書を作成する
無料の App Service マネージド証明書は、App Service でカスタム DNS 名をセキュリティ保護するためのターンキー ソリューションです。 この TLS/SSL サーバー証明書は、前提条件の設定が同じままである限り、App Service によって完全に管理され、継続的に有効期限の 45 日前に 6 か月単位で自動的に更新され、ユーザーは何も行う必要がありません。 関連付けられているすべてのバインドは、更新された証明書で更新されます。 証明書を作成してカスタム ドメインにバインドすると、残りは App Service によって実行されます。
重要
無料のマネージド証明書を作成する前に、アプリの前提条件を満たしていることを確認してください。
無料の証明書は DigiCert によって発行されます。 一部のドメインでは、CAA ドメイン レコードを 0 issue digicert.com
の値を使用して作成することによって、DigiCert を証明書の発行者として明示的に許可する必要があります。
証明書は Azure がユーザーに代わって完全に管理するため、ルート発行者を含むマネージド証明書のあらゆる側面をいつでも変更できます。 これらの変更をユーザーは制御できません。 マネージド証明書または証明書階層の任意の部分に対するハードな依存関係または実務証明書の "ピン留め" を行わないようにしてください。 証明書のピン留め動作が必要な場合、この記事の他の使用可能な方法を使用し、カスタム ドメインに証明書を追加します。
無料の証明書には以下の制限が伴います。
- ワイルドカード証明書はサポートされません。
- 証明書のサムプリントを使用したクライアント証明書としての使用はサポートされません。これは、非推奨で削除される予定です。
- プライベート DNS はサポートされません。
- エクスポートできません。
- App Service Environment ではサポートされません。
- 英数字、ダッシュ (-)、ピリオド (.) のみがサポートされます。
- サポートされているのは、最大 64 文字のカスタム ドメインのみです。
- Web アプリの IP アドレスを指す A レコードが必要です。
- パブリックにアクセスできるアプリ上にある必要があります。
- Traffic Manager と統合されたルート ドメインではサポートされません。
- 証明書の発行と更新が正常に行われるには、上記のすべてを満たしている必要があります。
Azure portal の左側のメニューから、[App Services]><app-name> を選択します。
アプリのナビゲーション メニューで、[証明書] を選びます。 [マネージド証明書] ウィンドウで、[証明書の追加] を選択します。
無料の証明書のカスタム ドメインを選んで、[検証] を選択します。 検証が完了したら、[追加] を選択します。 サポートされているカスタム ドメインごとにマネージド証明書を 1 つだけ作成できます。
操作が完了すると、[マネージド証明書] の一覧に証明書が表示されます。
この証明書を使ってカスタム ドメインのセキュリティを実現するには、やはり証明書バインドを作成する必要があります。 「Azure App Service で TLS/SSL バインドを使用してカスタム DNS 名をセキュリティで保護する」の手順に従います。
App Service 証明書をインポートする
App Service 証明書をインポートするには、先に App Service 証明書を購入して構成してから、以下の手順に従って行います。
Azure portal の左側のメニューから、[App Services]><app-name> を選択します。
アプリのナビゲーション メニューから、[証明書]>[Bring your own certificates (.pfx)] (独自の証明書 (.pfx) を持ち込む)>[証明書の追加] の順に選択します。
[ソース] で、[App Service 証明書のインポート] を選択します。
[App Service 証明書] で、先ほど作成した証明書を選択します。
[証明書のフレンドリ名] で、アプリの証明書に名前を付けます。
[検証] を選択します。 検証が成功したら、[追加] を選択します。
操作が完了すると、[Bring your own certificates] (独自の証明書を持ち込む) の一覧に証明書が表示されます。
この証明書を使ってカスタム ドメインをセキュリティ保護するには、証明書バインドを作成する必要があります。 「Azure App Service で TLS/SSL バインドを使用してカスタム DNS 名をセキュリティで保護する」の手順に従います。
Key Vault から証明書をインポートする
Azure Key Vault を使用して証明書を管理していて、要件を満たしている場合、Key Vault から App Service に PKCS12 証明書をインポートできます。
Key Vault から読み取る権限を App Service に与える
既定では、App Service リソース プロバイダーはキー コンテナーにアクセスできません。 証明書のデプロイにキー コンテナーを使うには、キー コンテナーに対する読み取りアクセスをリソース プロバイダー (App Service) に認可する必要があります。 アクセス ポリシーまたは RBAC を使ってアクセスを許可できます。
リソース プロバイダー | サービス プリンシパル アプリ ID/割り当て先 | キー コンテナーの RBAC ロール |
---|---|---|
Microsoft Azure App Service または Microsoft.Azure.WebSites | - パブリック Azure クラウド環境の場合は abfa0a7c-a6b6-4736-8310-5855508787cd - Azure Government クラウド環境の場合は 6a02c803-dafd-4136-b4c3-5a6f318b4714 |
証明書ユーザー |
サービス プリンシパル アプリ ID または割り当て先の値は、App Service リソース プロバイダーの ID です。 アクセス ポリシーを使って App Service リソース プロバイダーにキー コンテナーのアクセス許可を認可する方法については、ドキュメント「Azure のロールベースのアクセス制御を使用して Key Vault のキー、証明書、シークレットへのアクセス権を付与する」をご覧ください。
Note
キー コンテナーからこれらの RBAC アクセス許可を削除しないでください。 行うと、App Service は Web アプリを最新のキー コンテナー証明書バージョンと同期できなくなります。
Key Vault からアプリに証明書をインポートする
Azure portal の左側のメニューから、[App Services]><app-name> を選択します。
アプリのナビゲーション メニューから、[証明書]>[Bring your own certificates (.pfx)] (独自の証明書 (.pfx) を持ち込む)>[証明書の追加] の順に選択します。
[ソース] で、[キー コンテナーからインポートする] を選択します。
[キー コンテナー証明書の選択] を選択します。
証明書を選ぶときは、次の表を参考にしてください。
設定 説明 サブスクリプション キー コンテナーに関連付けられているサブスクリプション。 Key vault インポートする証明書があるキー コンテナー。 [証明書] この一覧から、コンテナー内にある PKCS12 証明書を選びます。 コンテナー内のすべての PKCS12 証明書がその拇印と共に一覧表示されますが、App Service ですべてがサポートされているわけではありません。 選択を終えたら、[選択]、[検証]、[追加] の順に選びます。
操作が完了すると、[Bring your own certificates] (独自の証明書を持ち込む) の一覧に証明書が表示されます。 インポートがエラーで失敗する場合は、証明書が App Service の要件を満たしていません。
Note
Key Vault の証明書を新しい証明書で更新する場合、App Service によって証明書が 24 時間以内に自動的に同期されます。
この証明書を使ってカスタム ドメインをセキュリティ保護するには、証明書バインドを作成する必要があります。 「Azure App Service で TLS/SSL バインドを使用してカスタム DNS 名をセキュリティで保護する」の手順に従います。
プライベート証明書のアップロード
証明書プロバイダーから証明書を取得したら、このセクションの手順に従って、App Service 用に証明書を準備します。
中間証明書を結合する
証明機関から証明書チェーンで複数の証明書を提供されている場合は、それらの証明書を同じ順序でマージする必要があります。
テキスト エディターで、受け取った各証明書を開きます。
マージした証明書を格納するには、mergedcertificate.crt という名前のファイルを作成します。
各証明書の内容をこのファイルにコピーします。 証明書チェーンで指定されている証明書のシーケンス (自分の証明書で始まり、ルート証明書で終わるもの) に従ってください。次はその例です。
-----BEGIN CERTIFICATE----- <your entire Base64 encoded SSL certificate> -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- <The entire Base64 encoded intermediate certificate 1> -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- <The entire Base64 encoded intermediate certificate 2> -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- <The entire Base64 encoded root certificate> -----END CERTIFICATE-----
マージされたプライベート証明書を PFX にエクスポートする
次に、マージされた TLS/SSL 証明書を、証明書要求の生成に使われた秘密キーと共にエクスポートします。 OpenSSL を使って証明書の要求を生成した場合、秘密キー ファイルが作成されています。
Note
OpenSSL v3 で既定の暗号が 3DES から AES256 に変更されましたが、これはコマンド ライン (-keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES -macalg SHA1) でオーバーライドできます。 OpenSSL v1 では既定で 3DES が使われるため、生成された PFX ファイルは特別な変更なしでサポートされます。
証明書を PFX ファイルにエクスポートするには、次のコマンドを実行します。ただし、プレースホルダー <private-key-file> と<merged-certificate-file> を、秘密キーへのパスと、マージした証明書ファイルに置き換えます。
openssl pkcs12 -export -out myserver.pfx -inkey <private-key-file> -in <merged-certificate-file>
求められたら、エクスポート操作のパスワードを指定します。 後で TLS/SSL 証明書を App Service にアップロードするとき、このパスワードを指定する必要があります。
IIS または Certreq.exe を使って証明書の要求を生成した場合は、ローカル コンピューターに証明書をインストールした後で、証明書を PFX ファイルにエクスポートします。
証明書を App Service にアップロードする
これで、証明書を App Service にアップロードする準備ができました。
Azure portal の左側のメニューから、[App Services]><app-name> を選択します。
アプリのナビゲーション メニューから、[証明書]>[Bring your own certificates (.pfx)] (独自の証明書 (.pfx) を持ち込む)>[証明書のアップロード] の順に選択します。
.pfx 証明書をアップロードする際は、次の表を参考にしてください。
設定 [説明] PFX 証明書ファイル .pfx ファイルを選択します。 証明書のパスワード PFX ファイルをエクスポートする際に作成したパスワードを入力します。 証明書のフレンドリ名 Web アプリに表示される証明書名。 選択を終えたら、[選択]、[検証]、[追加] の順に選びます。
操作が完了すると、[Bring your own certificates] (独自の証明書を持ち込む) の一覧に証明書が表示されます。
この証明書を使ってカスタム ドメインのセキュリティを実現するには、やはり証明書バインドを作成する必要があります。 「Azure App Service で TLS/SSL バインドを使用してカスタム DNS 名をセキュリティで保護する」の手順に従います。
パブリック証明書のアップロード
公開証明書は、 .cer 形式でサポートされています。
Note
パブリック証明書をアプリにアップロードした後は、アップロードされたアプリのみがそれにアクセスできます。 パブリック証明書は、アクセスが必要な個々の Web アプリにアップロードする必要があります。 App Service Environment 固有のシナリオについては、ドキュメント「証明書と App Service Environment」をご覧ください。
App Service プランごとに最大 1,000 個のパブリック証明書をアップロードできます。
Azure portal の左側のメニューから、[App Services]><app-name> を選択します。
アプリのナビゲーション メニューから、[証明書]>[公開キー証明書 (.cer)]>[証明書の追加] の順に選択します。
.cer 証明書をアップロードする際は、次の表を参考にしてください。
設定 [説明] CER 証明書ファイル .cer ファイルを選択します。 証明書のフレンドリ名 Web アプリに表示される証明書名。 終了したら、 [追加] を選択します。
証明書がアップロードされたら、証明書のサムプリントをコピーし、「証明書をアクセス可能にする」を確認します。
有効期限が近づいている証明書を更新する
証明書の有効期限が切れる前に、更新された証明書を App Service に追加し、プロセスが証明書の種類に依存しているすべての証明書バインドを更新してください。 たとえば、Key Vault からインポートされた証明書 (App Service 証明書など) は、自動的に 24 時間ごとに App Service に同期され、証明書を更新すると TLS/SSL バインドが更新されます。 アップロードされた証明書の場合は、バインドは自動更新されません。 シナリオに基づいて、対応するセクションを確認します。
アップロードされた証明書を更新する
期限切れの証明書を置き換えるとき、証明書バインドを新しい証明書で更新する方法によっては、ユーザー エクスペリエンスに悪影響を及ぼす可能性があります。 たとえば、バインドを削除すると、そのバインドが IP ベースであっても、インバウンド IP アドレスが変化することがあります。 IP ベースのバインドに既に存在する証明書を更新するときには、この結果による影響が特に大きくなります。 アプリの IP アドレスが変わらないようにし、HTTPS エラーによるアプリのダウンタイムを避けるには、次の手順で指定されている順序のとおりにしてください。
アプリの [カスタム ドメイン] ページに移動し、[...] ボタンを選んでから、[バインディングの更新] を選びます。
新しい証明書を選んでから、[更新] を選びます。
既存の証明書を削除します。
Key Vault からインポートされた証明書を更新する
注意
App Service 証明書を更新するには、「App Service 証明書の更新」を参照してください。
Key Vault から App Service にインポートした証明書を更新するには、「Azure Key Vault の証明書の更新」をご覧ください。
キー コンテナー内の証明書が更新された後、App Service は 24 時間以内に新しい証明書を自動的に同期して該当する証明書バインドを更新します。 手動で同期するには、次の手順のようにします。
アプリの [証明書] ページに移動します。
[Bring Your Own Certificate (.pfx)] で、インポートしたキー コンテナー証明書の [...] ボタンを選んでから、[同期] を選びます。
よく寄せられる質問
Bring Your Own Certificate のアプリへの追加を自動化するにはどうすればよいですか?
- Azure CLI: カスタム TLS/SSL 証明書を Web アプリにバインドする
- Azure PowerShell: PowerShell を使ってカスタム TLS/SSL 証明書を Web アプリにバインドする
アプリで受信 TLS にプライベート CA (証明機関) 証明書を使用できますか?
App Service Environment バージョン 3 では、受信 TLS にプライベート CA 証明書を使用できます。 これは、App Service (マルチテナント) には当てはまりません。 App Service マルチテナントとシングルテナントの詳細については、「App Service Environment v3 と App Service のパブリック マルチテナントとの比較」を参照してください。
アプリからプライベート CA クライアント証明書を使用して発信呼び出しを行うことができますか?
これは、マルチテナント App Service の Windows コンテナー アプリでのみサポートされます。 さらに、App Service Environment バージョン 3 では、コード ベースとコンテナー ベースの両方のアプリで、プライベート CA クライアント証明書を使って発信呼び出しを行うことができます。 App Service マルチテナントとシングルテナントの詳細については、「App Service Environment v3 と App Service のパブリック マルチテナントとの比較」を参照してください。
App Service の信頼されたルート ストアにプライベート CA 証明書を読み込むことができますか?
App Service Environment バージョン 3 では、ユーザー独自の CA 証明書を信頼されたルート ストアに読み込むことができます。 App Service (マルチテナント) では、信頼されたルート証明書のリストを変更することはできません。 App Service マルチテナントとシングルテナントの詳細については、「App Service Environment v3 と App Service のパブリック マルチテナントとの比較」を参照してください。