しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

Azure Management Libraries を Azure Web サイト上で利用する場合は証明書に注意

Azure Web サイトで Azure Management Libraries を使おうとすると、X509Certificate2 の作成時に必ずエラーになってしまいました。使った初期化コードは以下の記事と同じものになります。

Windows Azure Web サイトで国際化ドメイン名を使ってみた - しばやん雑記

自分が試した時にはエラーメッセージは以下のような感じでした。フラグによっては Access Denied が出たりもするみたいです。

f:id:shiba-yan:20140609210753p:plain

ぶっちゃけローカルでは動いていた証明書が、Azure Web サイトに持っていっただけでエラーになるので困りました。仕方ないので先人の知恵に頼ろうと思ったのですが、割とみんな苦戦しているようです。

PFX certificate files and Windows Azure Websites | Tyler's Azure Developer Blog
Using Publish Settings Files to Authenticate the Management Libraries

その中でも MSDN Forum に投稿された以下の記事が参考になりました。

Can't use publish credentials on Azure Websites

どうやら Azure からダウンロードできる publishsettings ファイルに含まれている証明書だとダメみたいです。ローカルにインストールされた何かを参照する必要があるみたいでした(知らんけど

なので、オレオレな証明書を作って管理ポータルから登録すれば使えるようになります。手順は兄者のブログが参考になるので、これをそのまま行うだけで大丈夫です。

Windows Azure SDK for .NET の Management Library を利用して Webサイト を動的に作成してみる - 割と普通なブログ

結局、X509Certificate2 を作る部分のコードは以下のようにしました。Base64Certificate は作成したオレオレ証明書で、エクスポート時にパスフレーズを入力した場合にはそれを指定してください。

var credentials = new CertificateCloudCredentials(SubscriptionId,
    new X509Certificate2(
        Convert.FromBase64String(Base64Certificate),
        "p@ssw0rd",
        X509KeyStorageFlags.MachineKeySet));

これで再度デプロイを行うと、正常に Management Libraries を使ったコードが実行できるはずです。

f:id:shiba-yan:20140609211956p:plain

関係ないですが、Web サイト用の GetInstanceIds API はマジ面白いと思うので、何か使い道を考えてみたいと思いました。