Windows AzureでSSL接続を行うためには

Azureを使う際に、HTTPSでアクセスするためには結構面倒な手続きが必要だったのでメモメモ。

証明書の発行について

【Azure for ITPRO】サービス証明書の準備 – Junichi Anno's blog ここを参考に進めたので、序盤はほとんど同じです。

そんな訳で、AzureへHTTPSでアクセスするためにはSSL証明書が必要となりますが、自己証明書を使う場合にはこの先の話は関係ないので飛ばして下さい。
証明書を発行するためには、ドメイン名が必要ですが Azureのホステッドサービスに割り当てられるドメイン名は hoge.cloudapp.netとなっています。この *.cloudapp.net はMicrosoftが管理しているドメインとなるため、hoge.cloudapp.netに対して他の人が証明書発行を行うことはできません。そのため独自のドメインを用意し、DNSのCNAMEによってドメインの別名を割り当て、その割り当てたドメインに対して証明書の発行を行うことになります。これによって、https://fuga.example.com のようなURLでAzureへアクセスできるようになります。

証明書の発行手続き

Azureで使用できる証明書の形式は決まっているためIISを使用する必要があります。
IISのインストールは完了した後、管理ツール→「インターネット インフォメーション サービス (IIS) マネージャー」を起動します。機能ビューの中の「サーバ証明書」を選択し、「証明書の要求の作成...」を実行します。
最初に表示される「識別名プロパティ」は証明書に使われる情報なので、正しく入力します。「一般名」にはFQDN(つまり、上記の場合 fuga.example.com)、「組織」には申請団体の正式な英語組織名を、「市区町村」「都道府県」にはそれぞれ住所をローマ字表記で、「国/地域」はデフォルトの JP でOKです。
次に、「暗号化サービスプロバイダのプロパティ」の画面が表示されます。暗号化サービスプロバイダは「Microsoft RSA Schannel Cryptographic Provide」のままで、ビット長を申請先の指定長より長いものにして下さい(通常は、2048か1024になるでしょう)。
最後に、CSRをどこに保存するかを聞かれるので、適当な場所を指定し保存します。中身はテキストファイルなので拡張子は、txtなり csrなり適当に。

後は、SSL発行手続きでこのCSRを提出し、サーバソフトウェアでは Microsoft IISを選択すればOKです。
手続きが終わるとCSRと似たようなテキストデータが発行されます。このデータをファイルに保存し、また「インターネット インフォメーション サービス (IIS) マネージャー」を起動します。先ほどと同様に「サーバ証明書」を開き、「証明書の要求の完了...」を実行します。後は、先ほどん保存したデータファイルを指定し、「フレンドリ名」には表示名称を入力します。これは証明書を表示した際の名称に使われるので、何でも良いですが適切な名前をつけて下さい。

Azure環境への適用

ここまでの流れで、ローカルの環境にはSSL証明書がインストールされた状態になります。しかし、証明書をAzureで使うためには管理ポータルからの登録が必要となります。そのためには、登録した証明書をエクスポートし管理ポータルで証明書の追加を行うことになります。
それでは、まずは証明書のエクスポートを行います。ファイル名を指定して実行から、「mmc」を実行します。ファイルメニュー→スナップインの追加と削除 を選択し、選択画面の「利用できるスナップイン」の一番下にある「証明書」を選択し利用ボタンをクリック。「証明書スナップイン」というダイアログが開くので「コンピューターアカウント」を選択し「次へ」、さらに「ローカルコンピューター」を選択し「完了」。以上で、OKボタンをクリック。
これでローカルコンピューターに登録されている証明書が全て見れます。左のペインにあるツリーから、「個人」→「証明書」を選択すると、登録したSSL証明書があると思います。右クリックし、「全てのタスク」→「エクスポート」を選びます。
「証明書のエクスポートウィザード」が開くので、「次へ」をクリック。「秘密キーのエクスポート」では「はい、秘密キーをエクスポートします」を選択し「次へ」。「エクスポートファイルの形式」は、Azureでは PFX形式しか使用できないので「Personal Information Exchange」を選択し「証明のパスにある証明書を可能であればすべて含む」にチェックを入れて「次へ」。「パスワード」ではこの証明書を使用する際のパスワードを決めて入力します。最後に出力するファイル名を入力して完了です。これで、pfxファイルが作成されました。
次に、ブラウザから https://windows.azure.com/default.aspx へ行きます。後はホステッドサービスで「証明書の追加」を選び、pfxファイルと自分で決めたパスワードを入力すれば登録完了です。

WebRoleの設定

ここまで設定しても、まだAzureへのHTTPSでの接続はできません。WebRole側に、エンドポイントの追加+HTTPSの場合にどの証明書を使うか、を設定する必要があります。この設定を行うためには、VisualStudioから設定できますが証明書がインストールされている必要があります。そのため、複数人で開発する場合には作成したpfxファイルを各々のPCにインストールすることが必要となります。
それでは、VisualStudioを立ち上げて設定をしていきます。WebRoleのプロパティ*1を開き、「証明書」のタブを開きます。ここで「証明書の追加」をクリックしSSL証明書を登録します。名前は、次のエンドポイントの設定で使うのでわかりやすい名称を付けておきます。サムプリントがAzureへ登録したものと同じであることを確認できたら証明書の設定は完了です。
次に、「エンドポイント」のタブを開きます。通常でしたら、ここには Input/http/ポート80 だけしか無いと思われます。「エンドポイントの追加」をクリックし Input/https/443 を追加します。この時、SSL証明書の名前の欄で先程追加した証明書の名称が選択できるはずなので、それを選択して完了です。
あとは、このプロジェクトをデプロイすれば httpsで接続できるようになります。

*1:Azureプロジェクトのプロパティではなく