powershell 証明書暗号化
【PowerShell】証明書を使用してパスワードを暗号化する
★★★★★★★★★★★★★★★
avatar of junichiajunichia12月 3, 20111
Share
0
0
※ この投稿は PowerShell Advent Calendar 2011 に参加しています。
証明書というと、つい SSL で使用するサーバー証明書を思い浮かべてしまいますが、パスワードを暗号化してどこかに格納しておきたいとか、パスワードを誰かに伝えるために暗号化して渡したい..なんていうシチューエションにも証明書が使われることがあります。
パスワードを暗号化する場合、シードと呼ばれる文字列を決めておき、これを用いて暗号化するという方法が良く使われますが、この方法の場合、シード自身の漏えいを配慮する必要があります。そこで、よく使われるのが証明書を使用してパスワードの暗号化する方法です。証明書を使用する方法であれば、証明書がインストールされていなければ復号化することもできないため、文字列のシードで管理するよりは安全性が高まります。Windows Azure なんかでも、この方法を使用したパスワードの暗号化を要求されることが多く、IT Pro にとっても身に着けておきたい手法だと言えます。
証明書による暗号化は、PowerShell を使用すると簡単です。
1.証明書の準備
まずは暗号化に使用する証明書を作成しましょう。
証明書の作成は PowerShell ではなく、通常のコマンドを使用します。
ここでは自己署名証明書を使用することにします。自己署名証明書を作成する方法はいくつもありますが、代表的な方法は以下の2通りです。
IIS の管理コンソールで作成する
Makecert コマンドを使用する
前者の場合、作成できる主体名は自分自身のみなので、ちょっと自由度が落ちるんですよね。ま、解凍できればよいので何でも構わないといえば構わないのですが…。
それよりも、Makecert コマンドを覚えて置いたほうが今後役に立ちます。Makecert コマンドは、Windows SDK に含まれているので、これをインストールしておく必要があることに注意してください。
Windows SDK for Windows 7 | MSDN
makecert コマンドは、以下のような比較的深いパスにインストールされています。
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\x64
通常のコマンドプロンプトやPowerShellコンソールではパスが通っていないので、一度上記のフォルダに移動する必要があるので注意しましょう。
Makecert コマンドで証明書を作成するための書式は以下の通りです。以下の書式では、CN=Encpassword という主体名の証明書を、ハッシュアルゴリズム sha1 を使用して 2048ビット長のキーで暗号化し、EncPassword.cer というファイル名で保存しています。
makecert -sky exchange -r -n "CN=Encpassword" -pe -a sha1 -len 2048 -b 12/15/2012 -e 12/30/2013 -sr currentuser -ss My ”EncPassword.cer" Succeeded
-sr currentuser –ss My は、作成したパスワードのインストール先です。currentuser は「現在のユーザー」、Myは「個人フォルダ」を示しています。指定せずに後から自分でインストールすることもできます。
-b 12/15/2012 -e 12/30/2013 はパスワードの有効期間です。-b が開始、-e が終了の年月です。
上記のコマンドを実行すると、以下のように証明書が作成されます。
image
image
長くなってしまいましたが、これで証明書の準備は完了です。
2.PowerShell を使用して暗号化
まずは以下のスクリプトをご覧ください。これがパスワードを暗号化するためのスクリプトです。