我需要设置一个部署脚本来导入我的服务使用的 SSL 证书。我尝试使用 WinHttpCertCfg 和 CertMgr 导入,但无济于事。
以下是我尝试使用的命令行参数:
winhttpcertcfg.exe -i <certname>.pfx -c LOCAL_MACHINE\My -p <password> -a <user service runs as>
和
CertMgr.exe -add -all -s -r localMachine -c <cert name> My
根据我的调查,CertMgr 不允许您使用密码导入证书,因此我宁愿让 winhttpcertcfg 工作。
当我运行它们时,我得到以下输出:WinHttpCertCfg:
Microsoft (R) WinHTTP Certificate Configuration Tool
Copyright (C) Microsoft Corporation 2001.
证书管理器:
CertMgr Succeeded
但是,当我在 MMC 中查看本地机器证书、尝试从我的服务中加载它们、或通过 winhttpcertcfg 列出它们,甚至查看 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates\MY\Certificates 中的注册表时,都找不到它们。
我已尝试以下所有方法:
- 如果我手动安装证书(通过 CertMgr.msc 对话框),它就可以起作用。
- 安装的用户以管理员身份运行
- 安装用户对证书具有完全访问权限
- 当出现错误(密码错误)时,工具会打印出错误
- 在多台机器上尝试过(所有机器都是服务器 2008 R2)
至此,我已经没有任何主意了。
谢谢。
答案1
总是有CertUtil.exe:
CertUtil -p Password -ImportPFX File.pfx
欲了解更多选项,请参见此处:
http://technet.microsoft.com/en-us/library/cc732443.aspx
或者尝试:
CertUtil -ImportPFX -?
答案2
我找到了答案:
事实证明,winhttpcertcfg 用于安装证书和 Win 2008 的库后端存在问题。还有一种替代方法,即使用 Powershell 安装证书。您可以编写一个脚本来使用 x509Certificate2 .NET 类并将证书导入您想要的任何存储。此方法还为您提供了更大的灵活性来执行所需的任何额外检查。
更多细节这里。