将保管库 PKI 颁发的证书转换为 PFX 格式以存储在 windows

Convert vault PKI issued certificate to PFX format to be stored in windows


我们有一个内部 Vault PKI 用于为 Linux 和 windows 机器生成证书。
对于 windows,我正在使用此 package 与保险库通信 API

   <# ...
    code to deal with the authentication with the vault PKI
    ... #>
   # generate a certificate 
   $hostname=hostname
   $certData=Write-VltData "pki_int/issue/$hostname" -Data @{ ttl="1440h"; common_name=$hostname; }

要存储此证书,我需要将其转换为 .pfx 格式,因此我有以下内容:


$data.certificate | out-file "c:\certs\server.crt" -Encoding "UTF8" -force
$data.private_key | out-file "c:\certs\server.key" -Encoding "UTF8" -force

并且我已经安装了 openssl 以将证书和私钥转换为 pfx 格式


openssl pkcs12 -export -out C:\certs\server.pfx -inkey C:\certs\server.key -in C:\certs\server.crt -passout pass:
Import-PfxCertificate -FilePath C:\certs\server.pfx -CertStoreLocation Cert:\LocalMachine\My

但是最后一个 cmdlet 抛出了这个错误:

我也尝试过手动导入证书,但我得到了以下 window 提示输入密码,即使我在转换过程中没有指定任何密码也是如此。

我的问题终于来了(我知道你也一直在等),如何成功导入PFX证书? N.B:

这与 Vault 无关,您确实需要没有密码的 PKCS12 密钥库。

指定 -passout pass: 是不够的,您需要所有这些:

-keypbe NONE -certpbe NONE -nomaciter -nodes -passout pass:

此答案中的详细信息:

很抱歉没有更新这个问题,中间还有其他问题。
因此,在为此苦苦挣扎了几个小时之后,我们发现我使用的 windows 版本 windows 2016 server which the OS build was less than 1703 不支持导入由 AES256-SHA256 生成的 pfx 证书加密,所以我们在导出时将其更改为 TripleDES-SHA1 AND 将算法设置为 SHA1,openssl 命令默认情况下未设置该算法,所以下面的命令对我们有用:

openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES -macalg SHA1

此命令将提示输入稍后用于将 pfx 证书导出到 windows 存储的密码,如果您不想使用任何密码,可以将此参数添加到上述命令中 -passout pass: