将证书转换为 pfx 或 p12 文件格式
Posted
技术标签:
【中文标题】将证书转换为 pfx 或 p12 文件格式【英文标题】:Convert cert to pfx or p12 file format 【发布时间】:2019-12-09 05:35:34 【问题描述】:在 Windows server 2016 上使用 powershell 将 .crt、.csr 和 .key 文件转换为 .pfx 或 .p12。
我有 .cert、.csr 和 .key 文件。但为了执行“netsh http add sslcert ...”命令,我需要 .pfx 或 .p12 文件。我需要在 powershell 中完成此操作。 Openssl 不是一个选项。
我已经使用 openssl 完成了上述工作。但是我现在限制下载软件,所以这不再是一个选择。我在 powershell 中寻找与openssl pkcs12 -export -out domain.name.pfx -inkey key.key -in cert.crt
命令等效的命令。
【问题讨论】:
表达需求不等于提出问题。到目前为止,您尝试了哪些方法,结果如何? 我认为这更多是关于 Windows 工具而不是 Powershell 的问题。可能有 Windows 系统命令行工具可以执行此操作,但我强烈怀疑标准 Powershell 是否会包含任何特定内容。 【参考方案1】:这是一个旧线程,但是由于我被困在完全相同的问题上并最终找到了正确的答案,而不仅仅是每个人都在大喊使用有时不可用的 openssl 我想我会在这里分享下一个幸运的灵魂。
有一个内置的 windows 实用程序调用 CertUtil 可以从 PS 调用,并且会执行此操作。至少早在 2012 年服务器时,它就可以开箱即用,不能与旧版本对话。
certutil –MergePFX certfile.cer certfile.pfx
要记住几件事,-MergePFX 只提示输入证书文件而不是密钥,所以:
私钥文件必须具有 .KEY 扩展名。 证书和密钥文件必须具有相同的基本文件名。 证书和密钥文件必须在同一目录中。【讨论】:
【参考方案2】:如果可以使用 .NET Core 3.0:
通过cert = new X509Certificate2(certFile)
加载证书
如果密钥文件是 PEM 编码的(例如以“----- BEGIN”开头)然后加载它,记住它是什么类型(人类或软件),找到页眉和页脚之间的 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 Framework 4.7.2:
加载证书,如上所述。 手动加载密钥: RSAPrivateKey How to get RSACryptoServiceProvider public and private key only in c# How to parse(Convert to RSAParameters) X.509 private key in C#? PKCS#8 PrivateKeyInfo Digital signature in c# without using BouncyCastle PKCS#8 EncryptedPrivateKeyInfo X509Certificate2.Import with NCRYPT_ALLOW_PLAINTEXT_EXPORT_FLAG(ImportEncryptedPkcs8Overwrite 方法) 如上使用 CopyWithPrivateKey/Export/WriteAllBytes如果你被一些旧的东西困住了:
您可以尝试加载证书,手动将密钥加载到 RSACryptoServiceProvider 中,使用 cert.set_PrivateKey,然后将其导出。仅适用于 .NET Framework(已从 .NET Core 中消除,因为它有太多副作用,尤其是对已在持久证书存储中的证书执行时)。
【讨论】:
以上是关于将证书转换为 pfx 或 p12 文件格式的主要内容,如果未能解决你的问题,请参考以下文章