Como detectar se um determinado certificado foi instalado em uma caixa do Windows?

5

Um pré-requisito para uma implantação de aplicativo em particular é que precisamos de um certificado PKI específico instalado no repositório de certificados dos Windows Trusted Publishers dos PCs antes da instalação.

Existe alguma maneira de detectar se um determinado certificado já foi instalado? O ideal é usar um comando de uma linha ou um script curto (que pode ser usado para a detecção de pré-requisitos ou como uma verificação de dependência no SCCM 2012)?

Parece haver muitos comandos e scripts para listar todos os certs instalados ou todos os certs instalados que expiram em breve, mas nada que eu possa ver para identificar se um determinado certificado está instalado.

    
por GAThrawn 16.04.2014 / 17:47

1 resposta

7

Isso é possível com um one-liner do PowerShell, você só precisa de uma maneira fácil de identificar esse certificado (estou usando o ThumbPrint do certificado).

Se você já tem uma máquina conhecida que você sabe que definitivamente tem o certificado instalado (a maneira mais fácil de verificar interativamente é usando apenas certmgr.msc ), então você pode usar essa máquina para localizar a impressão digital do certificado.

O seguinte comando do PowerShell listará todos os certs instalados no armazenamento do Trusted Publisher no contexto da máquina local:

Get-ChildItem -Path Cert:\LocalMachine\TrustedPublisher

Obviamente, o caminho acima pode ser modificado, para listar outras lojas cert, ou você pode ver (uma longa lista de) todos os certificados instalados localmente usando:

Get-ChildItem -Path Cert: -Recurse

O primeiro comando deve fornecer uma saída como esta:

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

Depois de encontrar a impressão digital do certificado que você está procurando, use-a para filtrar os resultados da seguinte forma:

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

Isso deve retornar os detalhes do certificado, se estiver instalado, e nada, se não estiver. Entre outros usos, este one-liner Powershell pode ser usado como um método personalizado de detecção de script em um aplicativo SCCM 2012.

(Recursos usados: Use o PowerShell para encontrar certificados que estão prestes a expirar | Dica: use o PowerShell para descobrir impressões digitais de certificados | Usando o cmdlet Where-Object )

    
por 16.04.2014 / 17:47