先日少しトラブルがありWindows証明書ストアの秘密鍵ファイルがどの証明書に関連付いているか調べる必要がありました。秘密鍵ファイル自体は以下のフォルダに格納されています。
All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys\
[Current Users]\Application Data\Microsoft\Crypto\RSA\
ただし秘密鍵ファイル名は以下のように長くて何が何だか分からない状態です。
b3ca0a111bbf8e656318fdb207a3e8dd_522ce35a-b76a-4290-8f61-428b2da2b319
当然ですがバイナリとして中を見てみてもおそらく暗号化されていて為だと思いますが少しIDらしき値はあるもののどの証明書と関連付いているかは分かりません。
少し調べてみたところMSDNに
FindPrivateKeyと言うツールを使えば証明書から秘密鍵ファイルを判定できることが分かりました。このツールはバイナリ配布では無くサンプルソースとしてWCF(Windows Communication Foundation)の一部として提供されています。でもGoogleやMSDNで検索して最初に出てくる
.NET Framework 4 の下にある FindPrivateKey のページではダウンロードが出来ませんでした…どこにあるのか探している人も多いようです。少し悩みましたが
.NET Framework 3.5 日本語の下にある FindPrivateKey のページから
ダウンロード(Download sample)が出来ました。
展開して以下のソリューションファイルをVisualStudio 2005で開いてビルドすると実行ファイル FindPrivateKey.exe が目出度く入手できます。
Samples\WCFWFCardSpace\WCF\Tools\FindPrivateKey\CS\FindPrivateKey.sln
早速使ってみましょう。引数としてとりあえず自分の個人証明書ストアを指定します。
> FindPrivateKey.exe My CurrentUser
(※ 証明書選択ダイアログで証明書を指定)
Private key directory:
C:\Documents and Settings\XXXXX\Application Data\Microsoft\Crypto\RSA\S-1-7-22-1708337768-839522215-682303330-1043
Private key file name:
b3ca0a1d3bbf7e656318fdb207a3e8dd_524ce35a-b79a-4792-8e71-422b2da2b393
最後に出力されている行が指定した証明書に関連付いている秘密鍵ファイルとなります。その前に格納されているフォルダのパスも表示されます。ソース付きなので何をどうやっているのかもソースを追えば簡単に分かります。
ダウンロード先が分かれば簡単な話だったのですが、どこからソースとプロジェクトを入手するのか迷ったのでここに記録に残します。参考になれば幸いです。なお上にあるID等は全て編集した値ですので正しく無い値ですので意味はありません。