如果已安装特定证书文件.crt或.cer等并且处于活动状态

时间:2017-01-04 18:51:36

标签: powershell

如果某个驱动器上的某个路径上的特定证书(例如“c:\ path \ MyCert.crt”)已安装并且处于活动状态,我将无法尝试获取。

我有以下内容:

$crt = New-Object System.Security.Cryptography.X509Certificates.X509Certificate;
$crt.Import("c:\path\MyCert.crt");
write-host "MyCert.crt expires after: " $crt.GetExpirationDateString();
$crt.GetName();

显示:

MyCert.crt在:11/12/2021 2:12:31 AM之后到期 C = ...,O =“...”,OU = ...,OU =“...”,CN = ...

尝试:

[bool](dir cert:\LocalMachine\ | ? { $_.subject -like "cn=MyCert" })

但不确定这是否告诉我它是否已安装并处于活动状态?

有人可以帮忙。

1 个答案:

答案 0 :(得分:1)

与@TessellatingHeckler建议一样,您应该比较指纹,因为这会告诉您是否安装了特定的证书。否则,即使证书已经续订或者其他事情发生了更改证书,您最终也会获得真正的价值。

您遇到的另一个问题是,默认情况下,Get-ChildItem(别名DIR)不会递归搜索路径,因此您只会看到文件夹证书可以通过运行您在示例中获得的内容生活在内部:

[1] PS C:\> dir cert:\LocalMachine\


Name : TrustedPublisher

Name : ClientAuthIssuer

Name : Remote Desktop

Name : Root

Name : TrustedDevices

Name : CA

...

您还会注意到将crt文件导入为' X509Certificate'对象不会显示指纹。你有两个选择,使用Get-PfxCertificate查看文件(我不确定这是什么时候引入的,所以我不确定你是否可以使用它),或者你可以将crt文件导入为' X509Certificate2'对象

请原谅我扩大别名'在您的代码段中,但以下内容可以解决问题:

$crt = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$crt.Import('c:\certs\CertFile.crt');

[bool](Get-ChildItem cert:\LocalMachine\ -Recurse | Where { $_.Thumbprint -eq $crt.Thumbprint })