使用 certmgr.MSC 工具以外的其他工具,在 Windows 中远程从命令行导出已安装的证书和私钥

使用 certmgr.MSC 工具以外的其他工具,在 Windows 中远程从命令行导出已安装的证书和私钥

我需要能够远程导出 Windows 服务器上已安装的计算机证书(包括完整证书链和私钥)。该证书用于 IIS,我想将其用于在同一服务器上运行的 Apache 实例。

我知道如何使用 certmgr.MSC mmc 管理单元工具手动执行此操作,但如何从命令行或从同一域中的远程计算机执行此操作?

我还知道如何使用 仅查看证书openssl s-client。是否可以使用它来保存证书和私钥以导入到 Java 密钥库文件中?

通过 RDP 进行 Certmgr 的速度太慢,不符合我的需要。我需要一个脚本解决方案。

我的环境是全部Windows 服务器 2008R2. PowerShell 远程处理未打开,但我可以打开它。

我已经确认无法使用PowerShell Export-PfxCertificate,因为我的服务器不够新……

因此,如果我可以使用 PowerShell 获取所需证书的指纹,那么我就可以将其提供给“certutil -exportpfx”命令。我已确认这可行。

我如何目录证书存储类似于“dir cert:\localmachine\my | Where-Object { $_.hasPrivateKey } | ”,然后将其与指纹一起提供给 certutil 导出?

或者,我可以先执行目录并告诉它仅打印出指纹而不是全部内容吗?然后将其保存到文件中,然后读取文件并执行 certutil 命令?

答案1

请参阅 Stack Overflow 问题使用 PowerShell 从 IIS 导出证书

如果答案对您有用,那么您可以使用PSRemoting进入PSSession或者调用命令) 或者执行

是否有人知道如何对证书存储进行目录划分,例如“dir cert:\localmachine\my | Where-Object { $_.hasPrivateKey } | ”,然后将其与指纹一起提供给 certutil 导出?

试试这个,对我有用:

Get-ChildItem -Path 'Cert:\localmachine\My' |
    Where-Object { $_.hasPrivateKey } |
        Foreach-Object {
            &certutil.exe @('-exportpfx', '-p', 'secret',  $_.Thumbprint, "$($_.Subject).pfx")
         }

当心,有时你不能使用它Subject作为文件名,因为 Unicode 中的外语字符无效。

答案2

在 PowerShell 中执行此操作可从一长串 Windows 服务器远程导出证书。$servers 是服务器列表。

foreach ($server in $servers){
Invoke-command $server {
Get-ChildItem -Path 'Cert:\localmachine\My' |
Where-Object { $_.hasPrivateKey } |
Foreach-Object {&certutil.exe @('-exportpfx', '-f', '-p','your_password',$_.Thumbprint, "d:\$($_.Subject).pfx")}
    }
    Move-Item -Path \\$server\d$\*.pfx -Destination C:\$server.pfx -Force
}

使用 Java keytool.exe 将每个 pfx 文件转换为 JKS 密钥库文件。Keytool 是每个 Java 安装的一部分。您可以在本地计算机或远程服务器上执行此操作(如果已安装 Java)。

keytool.exe -importkeystore -srckeystore C:\server1.pfx -destkeystore C:\server1.jks -srcstoretype pkcs12 -deststoretype JKS -srcstorepass your_password -deststorepass your_password

您也可以使用 Powershell 运行此程序($server 是服务器的名称)($pwd 是一个变量,保存着我们用来加密文件的密码):

foreach ($server in $servers){
& "C:\Program Files\Java\jre6\bin\keytool.exe" -importkeystore -srckeystore C:\$server.pfx -destkeystore C:\$server.jks -srcstoretype pkcs12 -deststoretype JKS -srcstorepass $pwd -deststorepass $pwd

}

答案3

  1. 以管理员身份打开 mmc
  2. 菜单文件-> 添加/删除管理单元 ( Ctrl+ M)
  3. 选择证书在左侧窗格中管理单元并点击添加
  4. 选择计算机帐户(第三种选择)
  5. 选择另一台计算机并输入您要管理其证书的远程系统的名称
  6. 完成对话框并点击确定

名称可能略有不同。我的操作系统是德语,所以我粗略地翻译了所有内容。

相关内容