Windows Azure ホステッドサービスでSSL

Windows Azure ホステッドサービスでSSL(HTTPS)したい場合のTipsです。
※Windows Azure SDK 1.3前提です。


サンプル用Webアプリの作成

とりあえず、テスト用のWebロールをさくっと作成。

前回のDNSまわりの話とも多少絡むので、リクエストされたホスト名を表示するようにしときます。

実行結果はこんな感じ。

 

証明書の準備

さて、このサイトにSSL(HTTPS)の設定をしたいと思います。
まずは下準備。

HTTPSで接続するにはサーバー側にそのサーバーが誰なのか、というのを証明するための証明書を秘密キー付きで持っていないといけません。

一般的なやり方はIISから要求を投げてルートCAなりに発行してもらうのですが、ここは面倒なので自己署名で+好きな発行先名を付けたいのでコマンドでやります。

Visual Studio 2010コマンドプロンプトを管理者として実行して下記コマンドを実行します。
※VSが無い場合はWindows 7 SDK等でも可

makecert -r -pe -n "CN=buchizo.normal.sample" -sky exchange "buchizo.normal.sample.cer" -sv "buchizo.normal.sample.pvk"
pvk2pfx -pvk "buchizo.normal.sample.pvk" -spc "buchizo.normal.sample.cer" -pfx "buchizo.normal.sample.pfx" -pi 秘密キーのパスワード

makecertは証明書(.cer)と秘密キー(.pvk)を生成します。コマンド実行時に秘密キーに関するダイアログが表示されるので入力します。
また、-nの引数は発行先名なので、ここでHTTPSでアクセスする際のFQDNを指定します。
pvk2pfxは証明書と秘密キーを基に、秘密キー付証明書(.pfx)を生成しています。-piの引数にmakecertで指定したパスワードを渡します。ここで生成された.pfxファイルは後でも使うのでおいておきます。
あとの.cerと.pvkは削除してください。

さて、次はこの秘密キー付証明書である.pfxをインポートしなくちゃなりません。
IISではローカルマシンに保存されてる秘密キー付証明書がないと暗号化できませんので(暗号化するには証明書と秘密キーが必要)、IISから見れる場所に先ほど作成した.pfxファイルをインポートします。

インポート手段はいくつかあります。

  • .pfxファイルをダブルクリックして手動で配置
  • IISマネージャーからインポート
  • certutilコマンドの実行

どれも結果は同じになります(なるようにします)
IISマネージャーからインポートするにはコンピューターを選択して「サーバー証明書」→「インポート」を選択します。
※ここから証明書要求の作成等も可能です。

コマンドの場合は管理者で以下のように実行します。

certutil –p pfx作るときに指定したパスワード -importpfx buchizo.normal.sample.pfx

これで証明書のインポートは完了です。一応インポートされたか見てみます。
MMC.exeを立ち上げてスナップインの追加から「証明書」を選択してローカルコンピューターに接続します。

こんな感じで登録されています。

 

証明書の設定

次はWebロールに証明書を設定します。

サービスモデルのプロパティページの証明書タブでストアをLocalMachine、ストアの名前をMyにしてサムプリントの選択ボタンをクリックすれば選択可能な証明書が表示されます。

一覧から先ほど作成した証明書を選択。

こんな感じで使用する証明書が設定されました。
証明書の設定が完了すると、エンドポイントでSSL証明書を選択することができるようになります。

今回はHTTPSのみにしてみました。あとはこのロールをデバッグするときにHTTPSで起動するように設定変えておきます。

 

動作確認

ではF5でデバッグ。

警告でますね。とりあえず無視してサイトの閲覧を続行します。

いちおうHTTP/SSLになってますが証明書は指定したものではないし、ポートも違うしうーん…ですね。

Compute Emulatorの挙動がよく分からないので、とりあえず後で調べることにして。
実際にWindows Azureのホステッドサービス上にUpしたいと思います。

先に、ホステッドサービス上のCertificatesに作成した.pfx(HTTPSのバインドで指定した証明書)をアップロードしておいてください。(証明書なしで配置するとエラーになります)

では普通に発行して配置して…

同じようにエラーが出ます。ただ、今度はちゃんと意図したとおり、指定した証明書を使ってますね。エラーの内容はホスト名と証明書の発行先が異なってるからのようです。

では、前回の投稿で説明したようにCNAMEもしくはHOSTSをだまして接続してみたいと思います。

結果は見ての通り、証明書のエラーなしで問題なく接続できています。
※ちなみに別PCから繋ぐと、信頼されたCAから発行されてないよ!と警告でたりします。(うまくいっているのは自己署名=作成したPCがCAとなるのですが、作成したPCにしか証明書がないため。証明書(.cer)を他のPCにコピーすれば問題ない)

というわけで今日はここまで。
あとはFull IISの場合、Siteの設定毎にBindingとEndpoint、Certificateを定義してあげればちゃんと仮想サイト毎に正しい証明書を指定することが出来そうですね。

但し注意点がありそうなのは、Windows Azureホステッドサービスに登録できる証明書に限りがある(らしい)=異なる証明書が必要となるサイトはその制限に引っ張られそう、という点でしょうか。。

今後はFull IIS周りの挙動とCompute Emulatorの挙動あたり見ていこうかな…

 

おまけ

証明書の設定を行った後のサービス定義ファイルとサービス設定ファイルはこんな感じです。

Windows Azure ホステッドサービスでSSL」への4件のフィードバック

  1. ピンバック: VM Role と Windows Azure Connect で AD FS Proxy を公開してみる « SE の雑記

    • カレントユーザーのストアに入れるんじゃなくてローカルコンピュータに入れないといけないので-userは不要なのですー

  2. ピンバック: Azure クラウドサービスにhttpsのエンドポイントを追加してみよう(その2) | 九州ドットネット倶楽部別館

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中