qshinoの日記

Powershell関係と徒然なこと

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 を使用して暗号化

まずは以下のスクリプトをご覧ください。これがパスワードを暗号化するためのスクリプトです。