使用powershell导出根证书

时间:2015-09-17 13:19:51

标签: powershell ssl certificate windows-server-2012

我正在通过Powershell在Windows 2012服务器上安装客户端证书。 安装客户端证书需要两个步骤:

  1. 在个人存储上安装证书("我的")。
  2. 在“受信任”中安装该证书的根证书 根证书颁发机构商店。
  3. 第1步相当容易。 但是,第2步很棘手。首先,我不知道证书链的长度。在手动执行时,您需要导出链中的每个证书,直到到达根目录(您只能导出链的第一个元素)。然后,在可信存储中安装根证书。

    所以,我的问题是:你如何获得证书的根证书? 我的想法是获得证书链并以某种方式处理它,直到你获得根证书。关于如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分:1)

GodEater的建议帮助了我,通过查看此页面https://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates(v=vs.110).aspx我想出了如何做到这一点: -

如果您将pkcs12证书导入System.Security.Cryptography.X509Certificates.X509Certificate2Collection

当您查看对象时,两个证书都在那里,因此只需循环遍历该对象并将每个证书添加到正确的商店即可: -

$fileName = "cert.p12";
$password = "Password"
$certRootStore = "localmachine";
$certStore = "Root";
$certStore2 = "My";
$X509Flags = "PersistKeySet,MachineKeySet";
$pfx = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2Collection;
$pfx.Import($fileName, $Password, $X509Flags);
foreach ($cert in $pfx) {
    if ($cert.Subject -match "CN=Your Cert Auth Name") {
        $store = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Store -ArgumentList $certStore,$certRootStore;
        $store.Open("MaxAllowed");$store.Add($cert);
        $store.Close | Out-Null
    }
    else {
        $store = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Store -ArgumentList $certStore2,$certRootStore;
        $store.Open("MaxAllowed");
        $store.Add($cert);
        $store.Close | Out-Null
    }
}