如何使用 PowerShell 获取 Windows 证书详细信息?


我们知道 Windows 证书驻留在证书存储中,但有时根据名称查找证书或获取特定证书的详细信息可能会很麻烦。

您可以使用 MMC 或使用 **CertMgr.msc** 命令访问证书存储。证书存储在 CurrentUser、ServiceAccount 和本地计算机中。要使用 PowerShell 访问证书存储,您需要访问 PSDrive,证书存储在名为 **Cert** 的驱动器中,如下所示。

PS C:\> Get-PSDrive cert | ft -AutoSize
Name Used (GB) Free (GB) Provider Root CurrentLocation
---- --------- --------- -------- ---- ---------------
Cert Certificate \

假设我们要检索存储在本地计算机帐户的根目录中的证书的详细信息,则可以使用以下命令。

示例

Get-ChildItem Cert:\LocalMachine\Root\

输出

PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\Root
Thumbprint                               Subject
----------                               -------
CDD4EEAE6000AC7F40C3802C171E30148030C072 CN=Microsoft Root Certificate Authority
BE36A4562FB2EE05DBB3D32323ADF445084ED656 CN=Thawte Timestamping CA, OU=Thawte Ce
A43489159A520F0D93D032CCAF37E7FE20A8B419 CN=Microsoft Root Authority, OU=Microso
92B46C76E13054E104F230517E6E504D43AB10B5 CN=Symantec Enterprise Mobile Root for
8F43288AD272F3103B6FB1428485EA3014C0BCFE CN=Microsoft Root Certificate Authority
7F88CD7223F3C813818C994614A89C99FA3B5247 CN=Microsoft Authenticode(tm) Root Auth

或者您也可以使用以下命令,

Get-Item Cert:\LocalMachine\Root\* | ft -AutoSize

以下命令将获取所有 Microsoft 证书。

Get-ChildItem Cert:\LocalMachine\Root\ | where{$_.Subject -like "*Microsoft*"}

要查找特定证书,您应该知道证书的友好名称。例如,要从根存储中查找 **“DigiCert”** 证书,

示例

Get-ChildItem Cert:\LocalMachine\Root\ | where{$_.FriendlyName -eq 'DigiCert'}

输出

Thumbprint                                Subject
----------                                -------
A8985D3A65E5E5C4B2D7D66D40C6DD2FB19C5436  CN=DigiCert Global Root CA, OU=www.digicert.com,
0563B8630D62D75ABBC8AB1E4BDFB5A899B24D43  CN=DigiCert Assured ID Root CA, OU=www.digicert.com

要直接从 **LocalComputer、CurrentUser** 或 **Root** 存储中搜索,请使用 **-Recurse** 参数。

Get-ChildItem Cert:\LocalMachine\ -Recurse | where{$_.FriendlyName -eq 'DigiCert'}

获取指纹或友好名称后,可以使用 fl * 管道获取证书的完整详细信息。

Get-ChildItem Cert:\LocalMachine\root | where{$_.FriendlyName -eq 'DigiCert'} | fl *

对于远程服务器,我们可以使用 **Invoke-Command**,以下示例将获取来自远程服务器的证书。

示例

Invoke-Command -ComputerName Test1Comp, Test2Comp -Scriptblock{
   Get-ChildItem Cert:\LocalMachine\root | where{$_.FriendlyName -eq 'DigiCert'}
}

更新于: 2021年2月8日

39K+ 浏览量

开启您的 职业生涯

通过完成课程获得认证

立即开始
广告