2014年5月27日火曜日

powershell で windowsの証明書のプロパティを取得する方法(テンプレート項目追加)

今日引き続きpowershellで windowsの証明書の情報を引き出すスクリプトを書いています。

前回 の記事でpowershellで証明書を取得する方法を紹介いたしました。
今回は証明書のプロパティも確認や絞り出せるようにご紹介致します。

今日はユーザー証明書のコマンドを例にします
・ローカルユーザーの証明書リストを出すコマンドは
 Get-ChildItem -path Cert:\CurrentUser -Recurse

このコマンドをGet-ChildItem -path Cert:\CurrentUser で打つと、子項目が出力されます

パスに子項目も書いてると、その項目の証明書だけ取得することができます。

で、プロパティの見方は?

$a = get-childitem Cert:\CurrentUser\ca | fl    
これでCAオブジェクト中身の証明書のより詳細な内容が表示されます

で、もっと詳細の情報が見たい場合、MSのTechNetで
get-childitem Cert:\CurrentUser\ca | Format-List -Property *
っていう書き方で見れます。
参考:http://technet.microsoft.com/en-us/library/hh847761.aspx


この詳細なプロパティをみって、あれ?テンプレートの項目がないではないかと疑問が生じ、どうやって見れるのかを調べてみました。
結局テンプレートの表示は拡張で項目を追加しないといけないんで、ファンクションを書く必要があります。幸いに、英語の記事でもう書いてくれた人がいまして、それをそのまま持ってきて使ってみました。
スクリプトファンクション内容:
function Transform-Certificate {
[CmdletBinding()]
    param(
 [Parameter(Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
 [Security.Cryptography.X509Certificates.X509Certificate2]$cert
 )
    process {
        $temp = $cert.Extensions | ?{$_.Oid.Value -eq "1.3.6.1.4.1.311.20.2"}
 if (!$temp) {
            $temp = $cert.Extensions | ?{$_.Oid.Value -eq "1.3.6.1.4.1.311.21.7"}
 }
        $cert | Add-Member -Name Template -MemberType NoteProperty -Value $temp.Format(1) -PassThru
 }
}

で、使うときは以下になります:
get-childitem cert:\CurrentUser\my | Transform-Certificate |fl *

参考はここ:http://social.technet.microsoft.com/Forums/windowsazure/en-US/187698d0-5602-4301-9d0c-85e89d948ea2/user-powershell-to-get-the-template-used-to-create-a-certificate

ファンクションの中身をちらと見て、証明書タイプのオブジェクトにTempalateのプロパティ項目を追加するように書いていますが、細かく理解するには引数の意味を調べないと多分難しいと思います。これは深い!深いです! まぁ調べればわかると思います。

このファンクションを使ってみると、flで出力すると、テンプレート属性を持ってない証明書にはエラーが出ます
が、テンプレート属性の持つ証明書プロパティは正常に出力されました。

ま、スクリプトをちょっと弄ってればエラーを出ないようにできる思いますので、大丈夫と思います。

また次回に何を書こうかをまだわからないのですが、なにかわかったら書こうと思います。

ブログを書くのはまだ二回目ですが、読んでいただいた皆さんに感謝!



2014年5月21日水曜日

powershell で windowsの証明書リストを取得する方法

今日はスクリプトでどうやってwindowsの証明書リストを取得できるのかを調べてみました。
◆まず、普通にGUIで証明書リストをエクスポートする方法をご紹介いたします
・「プログラムとファイルの検索」にmmcを入力してEnterキーを押すとmmcが立ち上がります
・左上の「ファイル」をクリックして、「スナップインの追加と削除を選択」します
・リストの中から証明証を追加します(ここはいくつの種類があるので、要望に応じて選択してください)
・エクスポートしたい証明書フォルダを選択し、右クリックすると「一覧のエクスポート」があるので、それをクリックすると、パスとかファイル名とかを指定すればできます。

で、ここでエクスポートしたリストはmmcで見た形式とはほぼ変わりません

◆これから スクリプト(powershell)でエクスポートする方法をご紹介致します
 powershellにて、以下のコマンドを打てばいいです

・ローカルコンピューターの証明書リストを出すコマンドは
 Get-ChildItem -Path cert:\LocalMachine -Recurse

・ローカルユーザーの証明書リストを出すコマンドは

 Get-ChildItem -path Cert:\CurrentUser -Recurse

もちろんこれで出力にはならないので、CSVファイル形式で出力する場合は以下の例のようにすればいいです
例:Get-ChildItem -Path cert:\LocalMachine -Recurse Export-Csv c:\tmp\cert.csv 
赤い部分が出力の例です、パスは適当に書いています。
参考リンク:
http://technet.microsoft.com/en-us/library/hh848632.aspx