Azure でアプリケーション用に TLS を構成する
重要
2024 年 9 月 1 日に、すべてのお客様に対して Cloud Services (クラシック) は非推奨になりました。 既存の実行中のデプロイはすべて Microsoft によって停止およびシャットダウンされ、2024 年 10 月以降、データは永久的に失われます。 新しいデプロイでは、新しい Azure Resource Manager ベースのデプロイ モデル、 Azure Cloud Services (延長サポート) を使用してください。
以前は Secure Socket Layer (SSL) 暗号化と呼ばれていたトランスポート層セキュリティ (TLS) は、インターネットを介して送信されるデータをセキュリティで保護するために最もよく使用される方法です。 この一般的なタスクでは、Web ロールの HTTPS エンドポイントを指定する方法および TLS/SSL 証明書をアップロードしてアプリケーションを保護する方法を説明します。
Note
このタスクの手順は、Azure Cloud Services に適用されます。App Services については、こちらをご覧ください。
このタスクでは、運用環境のデプロイを使用します。 ステージング デプロイの使用に関する情報は、この記事の最後で紹介します。
クラウド サービスをまだ作成していない場合は、「Azure Cloud Service (クラシック) を作成してデプロイする方法」を最初にお読みください。
手順 1:TLS/SSL 証明書を取得する
アプリケーション用に TLS を構成するには、最初に、この目的のための証明書を発行する信頼されたパートナーである証明機関 (CA) によって署名された TLS/SSL 証明書を取得する必要があります。 まだない場合は、TLS/SSL 証明書を販売する会社から取得する必要があります。
証明書は、Azure における TLS/SSL 証明書の次の要件を満たす必要があります。
- 証明書は公開キーを含む必要があります。
- 証明書はキー交換のために作成され、Personal Information Exchange (.pfx) ファイルにエクスポートできる必要があります。
- 証明書の件名はクラウド サービスへのアクセスに使用されるドメインと一致する必要があります。 証明機関 (CA) から cloudapp.net ドメイン用の TLS/SSL 証明書を取得することはできません。 サービスにアクセスするときに使うカスタム ドメイン名を取得する必要があります。 CA に証明書を要求するときは、証明書の件名がアプリケーションにアクセスするために使用するカスタム ドメイン名と一致している必要があります。 たとえば、カスタム ドメイン名が contoso.com である場合は、*.contoso.com または www.contoso.com の証明書を CA に要求します。
- 証明書では、2048 ビット以上の暗号化を使用する必要があります。
テスト目的で、自己署名証明書を 作成して 使用できます。 自己署名証明書は CA を通じて認証されず、cloudapp.net ドメインを Web サイト URL として使用できます。 たとえば、次のタスクでは自己署名証明書を使用しますが、証明書で使用される共通名 (CN) は sslexample.cloudapp.net です。
次に、この証明書に関する情報を、サービス定義ファイルおよびサービス構成ファイルに含める必要があります。
手順 2:サービス定義ファイルとサービス構成ファイルを変更する
アプリケーションは、証明書を使用するように構成する必要があります。また、HTTPS エンドポイントを追加する必要があります。 その結果として、サービス定義ファイルおよびサービス構成ファイルを更新する必要があります。
お使いの開発環境で、サービス定義ファイル (CSDEF) を開き、WebRole セクション内に Certificates セクションを追加し、証明書 (および中間証明書) に関する次の情報を含めます。
<WebRole name="CertificateTesting" vmsize="Small"> ... <Certificates> <Certificate name="SampleCertificate" storeLocation="LocalMachine" storeName="My" permissionLevel="limitedOrElevated" /> <!-- IMPORTANT! Unless your certificate is either self-signed or signed directly by the CA root, you must include all the intermediate certificates here. You must list them here, even if they are not bound to any endpoints. Failing to list any of the intermediate certificates may cause hard-to-reproduce interoperability problems on some clients.--> <Certificate name="CAForSampleCertificate" storeLocation="LocalMachine" storeName="CA" permissionLevel="limitedOrElevated" /> </Certificates> ... </WebRole>
Certificates セクションでは、証明書の名前、その場所、それがあるストアの名前を定義します。
アクセス許可 (
permissionLevel
属性) は、次の値のいずれかに設定できます。アクセス許可の値 説明 limitedOrElevated (既定) すべてのロール プロセスが秘密キーにアクセスできます。 elevated 引き上げられたプロセスだけが秘密キーにアクセスできます。 サービス定義ファイルで、Endpoints セクション内に InputEndpoint 要素を追加し、HTTPS を有効にします。
<WebRole name="CertificateTesting" vmsize="Small"> ... <Endpoints> <InputEndpoint name="HttpsIn" protocol="https" port="443" certificate="SampleCertificate" /> </Endpoints> ... </WebRole>
サービス定義ファイルで、Sites セクション内に Binding 要素を追加します。 この要素は、エンドポイントをサイトにマップするための HTTPS バインドを追加します。
<WebRole name="CertificateTesting" vmsize="Small"> ... <Sites> <Site name="Web"> <Bindings> <Binding name="HttpsIn" endpointName="HttpsIn" /> </Bindings> </Site> </Sites> ... </WebRole>
サービス定義ファイルに対して必要な変更はすべて完了しましたが、サービス構成ファイルに証明書の情報を追加する必要もあります。
サービス構成ファイル (CSCFG) ServiceConfiguration.Cloud.cscfg に、対象の証明書の [証明書] 値を追加します。 次のコード サンプルは [証明書] セクションの詳細を提供します。ただし、拇印の値は提供しません。
<Role name="Deployment"> ... <Certificates> <Certificate name="SampleCertificate" thumbprint="9427befa18ec6865a9ebdc79d4c38de50e6316ff" thumbprintAlgorithm="sha1" /> <Certificate name="CAForSampleCertificate" thumbprint="79d4c38de50e6316ff9427befa18ec6865a9ebdc" thumbprintAlgorithm="sha1" /> </Certificates> ... </Role>
(この例では、拇印アルゴリズムに sha1 を使用します。証明書の拇印アルゴリズムに適切な値を指定してください。)
サービス定義ファイルとサービス構成ファイルを更新したので、Azure にアップロードするためにデプロイメントをパッケージ化します。 cspack を使っている場合は、/generateConfigurationFile フラグを使わないでください。使うと、挿入した証明書情報が上書きされます。
手順 3:証明書のアップロード
Azure Portal に接続して...
Portal の [すべてのリソース] セクションで、対象のクラウド サービスを選択します。
[証明書] を選択します。
証明書領域の先頭にある [アップロード] を選びます。
[ファイル] と [パスワード] を指定してから、データ入力領域の下部にある [アップロード] を選びます。
手順 4:HTTPS を使用してロール インスタンスに接続する
Azure でデプロイメントを実行できるようになったため、HTTPS を使用して接続できます。
[サイトの URL] を選んで、Web ブラウザーを開きます。
Web ブラウザーで、http ではなく https を使用するようにリンクを修正し、ページにアクセスします。
Note
自己署名証明書を使用している場合は、自己署名証明書に関連付けられている HTTPS エンドポイントを参照すると、ブラウザーで証明書エラーが表示されることがあります。 信頼された証明機関によって署名された証明書を使用すると、この問題は解消されます。 それまでの間、このエラーは無視してかまいません(また、信頼された証明書機関のユーザーの証明書ストアに自己署名証明書を追加する方法もあります)。
ヒント
運用環境のデプロイメントではなくステージング環境のデプロイメントに TLS を使用する場合は、最初に、ステージング環境のデプロイメントに使用されている URL を確認する必要があります。 クラウド サービスをデプロイした後、ステージング環境の URL は、形式
https://deployment-id.cloudapp.net/
のデプロイ ID GUID によって決定されます。GUID ベースの URL と同じ共通名 (CN) で証明書を作成します (たとえば 328187776e774ceda8fc57609d404462.cloudapp.net)。 ポータルを使用して、この証明書をステージングされたクラウド サービスに追加します。 次に、証明書情報を CSDEF ファイルと CSCFG ファイルに追加し、アプリケーションを再パッケージ化し、新しいパッケージを使用するようにステージング デプロイを更新します。