将 OpenSSL p12 创建命令转换为 Powershell and/or .NET Core 2.0

Translating a OpenSSL p12 creation command to Powershell and/or .NET Core 2.0

在打破我的头脑之前,我想到了社区(也许这在一般情况下会有用),如何将以下内容翻译成 Powershell and/or .NET Core 2.0?

openssl pkcs12 -export -out p12file.p12 -inkey privatekeygenerateinsomeportal.pem -in clientcertificatedownloadedfromsomeportal.pem

我绝对不知道如何在 .NET Core 2.0 中做到这一点 () and I haven't yet found the appropriate Powershell spell either. It appears Windows facilities have not supported pem format, which makes this a tad difficult (hence .NET Core 2.0 to rescue?), like extracted from How to convert a PFX to .PEM format? Or how to generate a .PEM file? Using Native/Standard Windows tool

Windows do not support PEM format

或者有一些第三方库,如图here

它也感觉 .p12 格式中可能存在导致互操作性问题的微妙之处(例如,当结果将通过 Xamarin.Forms 和诸如此类的东西用于各种环境时)。

假设你要做的是:

  • 从文件加载证书
  • 从文件加载私钥
  • 将它们一起保存在一个 PFX 中

那么 .NET Core 唯一无法为您轻松完成的部分就是加载私钥。如果你能弄清楚如何获取密钥(从 RSAParameters 或活动对象,或其他),你可以做

using (var cert = new X509Certificate2("cert.pem"))
using (var mated = cert.CopyWithPrivateKey(key))
{
    return mated.Export(X509ContentType.Pfx, password);
}

大概File.WriteAlllBytes那个值。

CopyWithPrivateKey 是 Core 2.0 中的新增功能,需要使用 netcoreapp20 TFM 进行编译。

加载密钥文件在 .NET 的待办事项列表中:https://github.com/dotnet/corefx/issues/20414