自动将 x509 证书从 Server 2008 R2 导出到 p7b 文件,无需外部工具?

2023-12-13

我集中管理域控制器,但站点管理员在本地管理他们自己的数字发送器。我可以通过向导轻松地将 X509 证书(不需要私钥)以及整个链从 Windows Server 2008 R2 域控制器导出到 p7b 文件:

~~~~~~~~~~~~~~~~~~

...5.证书导出向导打开。点击下一步。

  1. 在“导出文件格式”对话框中,执行以下操作:

    A。选择加密消息语法标准 - PKCS #7 证书 (.P7B)。

    b.如果可能,请选中包括证书路径中的所有证书。

    C。点击下一步。

  2. 在“要导出的文件”对话框中,单击“浏览”。

  3. 在“另存为”对话框中,执行以下操作:

    A。在“文件名”框中,键入 ciroots.p7b。

    b.在保存类型框中,选择 PKCS #7 证书 (*.p7b)。

    C。单击“保存”。

  4. 在“要导出的文件”对话框中,单击“下一步”。

  5. 在“正在完成证书导出向导”页面上,单击“完成”。

~~~~~~~~~~~~~~~~~~

效果很好。生成的文件可以很好地导入数字发送器以进行身份​​验证。它使站点管理员可以访问链中的其他证书(如果尚未导入)。它不需要包含私钥,因为没有它它也可以正常工作。

问题是,我需要手动执行此操作,实际上是数十次,每个业务站点一次,因为每个站点都有自己的域控制器,每个站点都有自己的证书。必须有一种方法可以自动导出此证书(PowerShell w/.NET、certutil.exe 等)。也许使用 System.Security.Cryptography.X509Certificates X509IncludeOption 和 WholeChain 的东西,但我无法让它工作:

$Cert = (dir Cert:\localmachine\my)[0]

# PKCS7 证书导出,文件扩展名为 .p7b。

$CertCollection = 新对象

System.Security.Cryptography.X509Certificates.X509Certificate2Collection

$证书| %{[void]$CertCollection.Add($_)}

$Exported_pkcs7 = $CertCollection.Export('Pkcs7')

$out_FileName = $ENV:COMPUTERNAME + ".p7b"

$My_Export_Path = 'd:\CertFiles\' + $out_FileName

设置内容-路径$My_Export_Path-值$Exported_pkcs7-编码字节

使用此代码,我只获得证书,而不是其链中的其余证书。我不需要整个脚本,只需要复制导出和链的部分,我已经可以通过 GUI 手动执行该部分了。


您需要构建证书链以获取链证书并将其添加到集合中:

function Export-Certificate {
[CmdletBinding()]
    param(
        [Parameter(Mandatory = $true)]
        [Security.Cryptography.X509Certificates.X509Certificate2]$Certificate,
        [Parameter(Mandatory = $true)]
        [IO.FileInfo]$OutputFile,
        [switch]$IncludeAllCerts
    )
    $certs = New-Object Security.Cryptography.X509Certificates.X509Certificate2Collection
    if ($IncludeAllCerts) {
        $chain = New-Object Security.Cryptography.X509Certificates.X509Chain
        $chain.ChainPolicy.RevocationMode = "NoCheck"
        [void]$chain.Build($Certificate)
        $chain.ChainElements | ForEach-Object {[void]$certs.Add($_.Certificate)}
        $chain.Reset()
    } else {
        [void]$certs.Add($Certificate)
    }
    Set-Content -Path $OutputFile.FullName -Value $certs.Export("pkcs7") -Encoding Byte
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自动将 x509 证书从 Server 2008 R2 导出到 p7b 文件,无需外部工具? 的相关文章

随机推荐