SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

VM Role の展開時に必要となる証明書を makecert で作ってみる

without comments

VM Role と書いていますが他の Role も一緒ですね。

Management Portal 登録する証明書としては以下の 2 種類があるかと思います。

  • 管理証明書 (Management Certiciate)
  • サービス証明書 (Service Certificate)

今回の投稿ではこれらの証明書を makecert で作ってみたいと思います。
VS や VWD をインストーすると GUI で作成できるのですけど、あえてこれらをインストールしないで対応するのが IT Pro。

詳細に関しては以下の技術情報で公開されています。
How to Create a Certificate for a Role

■makecert をインストール


makecert は [Microsoft Windows SDK for Windows 7 and .NET Framework 4] に含まれています。

makecert だけであれば、[Windows Native Code Development] の [Tools] をインストーすれば使用することができます。

image

 

■makecert で証明書を作成 (管理証明書)


インストールが終了したら makecert を使って証明書を作成します。
証明書作成ツール (Makecert.exe)

管理証明書の場合、[.cer] を作成すればよいので以下のコマンドで作成ができます。

"C:Program FilesMicrosoft SDKsWindowsv7.1binmakecert.exe" -r -pe -n "CN=<サブジェクトの証明書名>" -ss My "<証明書のファイル名>”

実際のコマンドとしてはこのような形で。

"C:Program FilesMicrosoft SDKsWindowsv7.1binmakecert.exe" -r -pe -n "CN=Azure Management Cert" -ss My "AzureManagementCert.cer"

コマンドを実行すると [.cer] ファイルが出力されますので、これを Management Portal で管理証明書として追加します。
image

 

■makecert で証明書を作成 (サービス証明書)


サービス証明書の場合は、[.pfx] を追加する必要があります。
上記のコマンドでは、[-pe] を設定しているため秘密キーのエクスポートが可能です。

先ほど作った証明書を [certmgr.msc] で秘密キーを含めてエクスポートしてみます。
image
image
image
image

エクスポートした証明書をサービス証明書として登録することはできます。
image

この状態でリモートデスクトップが有効になっている VM Role の環境をデプロイしてみます。
image

このようなエラーとなり、インスタンスを展開することができません。

サービス証明書ですが、[-sky exchange] を指定して作成した証明書を使用する必要があります。

"C:Program FilesMicrosoft SDKsWindowsv7.1binmakecert.exe" -sky exchange -r -pe -n "CN=<サブジェクトの証明書名>" -ss My

実際のコマンドとしてはこちら

"C:Program FilesMicrosoft SDKsWindowsv7.1binmakecert.exe" -sky exchange -r -pe -n "CN=Azure Serivce Cert" -ss My

作成した証明書をエクスポートしてサービス証明書として Management Portal に登録をします。
image

image

今回は正常にインスタンスを作成することができました。
image

今回は証明書をエクスポートして使用していますが、

"C:Program FilesMicrosoft SDKsWindowsv7.1binmakecert.exe" -sky exchange -r -pe -n "CN=Azure Management Cert" -ss My "azureservicecert.cer" -sv "azureservicecert.pvk"

"C:Program FilesMicrosoft SDKsWindowsv7.1bin\pvk2pfx" -pvk "azureservicecert.pvk" -spc "azureservicecert.cer" -pfx "azureservicecert.pfx" ?pi "<秘密キーのパスワード>"

というような形で、[pvk2pfx] を使用することで [pfx] を作成することも可能です。
# このツールも [Microsoft Windows SDK for Windows 7 and .NET Framework 4] に含まれています。
Pvk2Pfx

リモートデスクトップや Windows Azure Connect を使用する場合は、サービス証明書を使用してパスワードを暗号化する必要がありますが、方法については以下の技術情報に記載されています。
How to Encrypt a Password

以下のような PowerShell のスクリプトを実行することで証明書を使用して暗号化したパスワードを出力することが可能です。

[Reflection.Assembly]::LoadWithPartialName("System.Security")
$pass = [Text.Encoding]::UTF8.GetBytes("<パスワード>")
$content = new-object Security.Cryptography.Pkcs.ContentInfo ?argumentList (,$pass)
$env = new-object Security.Cryptography.Pkcs.EnvelopedCms $content
$env.Encrypt((new-object System.Security.Cryptography.Pkcs.CmsRecipient(gi cert:CurrentUserMy<証明書の拇印>)))
[Convert]::ToBase64String($env.Encode())

VM Role のパッケージに関してはサービス定義ファイル (.csdef) を cspack で指定するだけで簡単に作成ができるので、VS や VWD をインストールしなくても対応ができると思います。
CSPack Command-Line Tool

VM Role の場合は、以下のコマンドで簡単にパッケージが作成できてしまうので。

"C:Program FilesWindows Azure SDKv1.4bincspack.exe" "<サービス定義ファイル>" /out:"<パッケージの出力先>"

証明書はかなり苦手なので調べたことをコピペで使えるようにメモとして残しておきたいと思います。

Written by Masayuki.Ozawa

4月 3rd, 2011 at 7:24 pm

Posted in Windows Azure

Tagged with

Leave a Reply