通过PowerShell生成CSR后证书无法导出私钥的问题
证书导出时无法显示“导出私钥”的解决方案
问题场景
通过PowerShell执行命令 certreq.exe -new .\sampleCreateCSR.ini CSRsample.txt 生成CSR,完成证书签发并安装到个人证书文件夹后,打开certmgr.msc进入证书导出向导,点击下一步时“导出私钥”选项不显示;但通过MMC创建CSR生成的证书则正常显示该选项,已使用管理员权限运行PowerShell。
原因分析
你的sampleCreateCSR.ini配置中设置了 MachineKeySet = TRUE,这个参数会把私钥存储在计算机账户的密钥容器里,而certmgr.msc默认打开的是当前用户账户的证书存储。你将证书安装到用户个人文件夹后,用户账户的证书无法关联到计算机账户里的私钥,因此导出时不会显示“导出私钥”选项。
解决方法
方法1:修改配置让私钥存储在用户账户
把配置里的MachineKeySet = TRUE改为MachineKeySet = FALSE,这样私钥会存储在当前用户账户的密钥容器中,后续生成的证书安装到个人文件夹后即可正常导出私钥。修改后的完整配置如下:
[Version] Signature= '$Windows NT$' [NewRequest] Subject = "CN=dummy, OU=IS, O=Sample, L=Bangalore, S=Karnataka, C=IN" FriendlyName = dummy KeyLength = 2048 Exportable = TRUE MachineKeySet = FALSE SMIME = False PrivateKeyArchive = FALSE UserProtected = FALSE UseExistingKeySet = FALSE ProviderName = Microsoft RSA SChannel Cryptographic Provider ProviderType = 12 HashAlgorithm = sha256 RequestType = PKCS10 KeyUsage = 0xa0 [EnhancedKeyUsageExtension] OID=1.3.6.1.5.5.7.3.1
修改后重新执行certreq.exe -new命令生成新CSR,重新申请签发证书并安装到个人证书文件夹,此时打开certmgr.msc导出就能看到“导出私钥”选项。
方法2:保留计算机账户存储,从对应位置导出
如果必须使用MachineKeySet = TRUE,则需将证书导入到计算机账户的证书存储中:
- 打开MMC,添加“证书”管理单元时选择“计算机账户”
- 在“个人>证书”中找到对应的证书,从这里进入导出向导,即可看到“导出私钥”选项
内容的提问来源于stack exchange,提问作者Rahul
相关产品推荐
相关产品推荐

