web-dev-qa-db-ja.com

特定の証明書がWindowsボックスにインストールされているかどうかを検出する方法は?

特定のアプリケーション展開の前提条件は、インストールする前に、PCのWindows Trusted Publishers証明書ストアに特定のPKI証明書をインストールする必要があることです。

特定の証明書が既にインストールされているかどうかを検出する方法はありますか?理想的には、ワンライナーコマンドまたは短いスクリプトを使用します(これは、前提条件の検出に使用できますか、SCCM 2012)の依存関係チェックとして使用できます)?

インストールされているすべての証明書、またはすぐに期限切れになるすべてのインストール済み証明書を一覧表示するためのコマンドやスクリプトはたくさんあるようですが、特定の証明書が1つインストールされているかどうかを特定する方法はありません。

9
GAThrawn

これは、PowerShellワンライナーで可能です。その証明書を特定する簡単な方法が必要です(私は証明書のThumbPrintを使用しています)。

すでに既知のマシンに証明書がインストールされていることがわかっている場合(対話形式で確認する最も簡単な方法は、certmgr.msc)次に、そのマシンを使用して証明書の拇印を検索できます。

次のPowerShellコマンドは、ローカルコンピューターコンテキストの信頼された発行元ストアにインストールされているすべての証明書を一覧表示します。

Get-ChildItem -Path Cert:\LocalMachine\TrustedPublisher

明らかに、上記のパスを変更して他の証明書ストアを一覧表示したり、次のコマンドを使用してローカルにインストールされたすべての証明書(の長いリスト)を表示したりできます。

Get-ChildItem -Path Cert: -Recurse

最初のコマンドは、次のような出力を提供します。

PS C:\> Get-ChildItem -Path Cert:\LocalMachine\TrustedPublisher


    Directory:
    Microsoft.PowerShell.Security\Certificate::LocalMachine\TrustedPublisher


Thumbprint                                Subject
----------                                -------
83EDC96EC3D55125EFFC77BC815F9133E268D5EB  CN="User, Test", OU=Testing Resources...
4DFF713712084D43DE6879C689F9A143C4A793BF  CN=Server One Self-signed

探している証明書の拇印が見つかったら、それを使用して次のように結果をフィルター処理できます。

Get-ChildItem -Path Cert:\LocalMachine\TrustedPublisher | Where-Object {$_.Thumbprint -eq "83EDC96EC3D55125EFFC77BC815F9133E268D5EB"}

インストールされている場合は証明書の詳細が返され、インストールされていない場合は何も返されません。他の用途の中でも、このPowershellワンライナーは、SCCM 2012アプリケーションのカスタムスクリプト検出メソッドとして使用できます。

(使用するリソース: PowerShellを使用して有効期限が近づいている証明書を検索する | PowerTip:PowerShellを使用して証明書のサムプリントを検出する | Where-Objectコマンドレットを使用する =)

10
GAThrawn