我需要能够远程导出 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
- 以管理员身份打开 mmc
- 菜单文件-> 添加/删除管理单元 ( Ctrl+ M)
- 选择证书在左侧窗格中管理单元并点击添加
- 选择计算机帐户(第三种选择)
- 选择另一台计算机并输入您要管理其证书的远程系统的名称
- 完成对话框并点击确定
名称可能略有不同。我的操作系统是德语,所以我粗略地翻译了所有内容。