0

在 Windows server 2016 上使用 powershell 将 .crt、.csr 和 .key 文件转换为 .pfx 或 .p12。

我有 .cert、.csr 和 .key 文件。但为了执行“netsh http add sslcert ...”命令,我需要 .pfx 或 .p12 文件。我需要在 powershell 中完成此操作。Openssl 不是一个选项。

我已经使用 openssl 完成了上述工作。但是我现在限制下载软件,所以这不再是一个选择。openssl pkcs12 -export -out domain.name.pfx -inkey key.key -in cert.crt我在 powershell 中寻找等效的命令。

4

2 回答 2

1

这是一个旧线程,但是由于我被困在完全相同的问题上并最终找到了正确的答案,而不仅仅是每个人都在大喊使用 openssl 有时不可用,我想我会在这里分享下一个幸运的灵魂。

有一个内置的 Windows 实用程序调用 CertUtil,可以从 PS 调用它,并且会执行此操作。至少早在服务器 2012 中,它就可以开箱即用,不能与旧版本对话。

certutil –MergePFX certfile.cer certfile.pfx

需要记住的几件事,-MergePFX 只提示输入证书文件而不是密钥,所以:

  • 私钥文件必须具有 .KEY 扩展名。
  • 证书和密钥文件必须具有相同的基本文件名。
  • 证书和密钥文件必须在同一目录中。
于 2021-10-01T17:12:04.237 回答
0

如果您可以使用 .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:

如果你被困在旧的东西上:

您可以尝试加载证书,使用 cert.set_PrivateKey 手动将密钥加载到 RSACryptoServiceProvider 中,然后将其导出。仅适用于 .NET Framework(已从 .NET Core 中消除,因为它有太多副作用,尤其是对已在持久证书存储中的证书执行时)。

于 2019-08-14T18:12:39.607 回答