Назад | Перейти на главную страницу

Как определить, установлен ли конкретный сертификат в Windows?

Предварительным требованием для развертывания конкретного приложения является то, что перед установкой нам понадобится определенный сертификат PKI, установленный в хранилище сертификатов Windows Trusted Publishers на ПК.

Есть ли способ определить, установлен ли уже конкретный сертификат? В идеале использовать однострочную команду или короткий сценарий (который можно использовать для обнаружения предварительных запросов или в качестве проверки зависимостей в SCCM 2012)?

Кажется, существует множество команд и сценариев для перечисления всех установленных сертификатов или всех установленных сертификатов, срок действия которых скоро истекает, но я ничего не вижу для определения того, установлен ли один конкретный сертификат.

Это возможно с помощью однострочника 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)