convert .crt,.csr和.key Files to .pfx或.p12使用Windows Server 2016上的PowerShell。
我有.cert,.csr和.key文件。但是,为了执行" netsh http add sslcert ..."命令,我需要.pfx或.p12文件。我需要在PowerShell中完成。OpenSSL不是一个选项。
我已经使用OpenSSL完成了上述。但是IM现在仅限于下载软件,因此不再是一个选择。我正在寻找相当于powershell中的 openssl pkcs12 -export -out domain.name.pfx -inkey key.key -in cert.crt
命令。
这是一个旧线程我会在这里分享下一个幸运的灵魂。
有一个内置的Windows实用程序呼叫certutil,可以从PS调用,并将做到这一点。它至少可以在2012年的服务器上开箱即用。
certutil –MergePFX certfile.cer certfile.pfx
要牢记的几件事,-MergePFX仅提示CERTFILE而不是关键,因此:
- 私钥文件必须具有.key扩展名。
- 证书和密钥文件必须具有相同的基本文件名。
- 证书和密钥文件必须在同一目录中。
如果您可以使用.net core 3.0:
- 通过
cert = new X509Certificate2(certFile)
加载证书 - 如果密钥文件是PEM编码的(例如,以" -----开始"开头(,然后加载它,请记住它是什么类型(人类或软件(,请在标头和页脚之间找到base64内容,然后运行该内容通过convert.frombase64String获取键的BER/DER编码格式。
-
key = RSA.Create()
-
key.ImportPkcs8PrivateKey(bytes, out _)
,key.ImportEncryptedPkcs8PrivateKey(password, bytes, out _)
或key.ImportRSAPrivateKey(bytes, out _)
;取决于私钥文件的格式。 -
certWithKey = cert.CopyWithPrivateKey(key)
-
File.WriteAllBytes("new.pfx", certWithKey.Export(X509ContentType.Pkcs12, password))
如果您可以使用.NET Core 2.1/.NET框架4.7.2:
- 加载证书,如上所述。
- 手动加载密钥:
- rsaprivateKey
- 如何仅在C# 中获得RsacryptoserviceProvider公共和私钥
- 如何解析(转换为rsaparameters(X.509 C#? 中的私钥
- PKCS#8 PrivateKeyInfo
- C#中的数字签名不使用Bouncycastle
- PKCS#8 EncryptedPrivateKeyinfo
- x509certificate2.import with ncrypt_allow_lallawall_plaintext_export_flag(emigitionencryptedpkcs8overwrite方法(
- rsaprivateKey
- 使用copywithprivatekey/export/writeallbytes如上所述
如果您陷入了年龄较大的东西:
您可以尝试使用CERT.SET.PRIVATEKEKEN,将密钥手动加载到rsacryptoserviceProvider中,并导出它。仅在.NET框架上工作(从.NET核心删除,因为它具有太多的副作用,尤其是在持久证书存储中已经完成的证书时(。