2

在让 ManagedOpenSsl 与 .Net Core 一起工作时,我一直面临着多重挑战。我从 nuget 包下载了 ManagedOpenSsl.NetCore。

我的最终目标是从证书 PEM 和私钥创建一个 .pfx 文件。在下面的代码中,ocert.KeyPair.PrivateKey是证书私钥,ocert.CertificatePem是证书 PEM。

ManagedOpenSsl.NetCore.Core.BIO key_bio = new ManagedOpenSsl.NetCore.Core.BIO(ocert.KeyPair.PrivateKey);
            ManagedOpenSsl.NetCore.Core.BIO cert_bio = new ManagedOpenSsl.NetCore.Core.BIO(ocert.CertificatePem);

            ManagedOpenSsl.NetCore.Crypto.CryptoKey key = ManagedOpenSsl.NetCore.Crypto.CryptoKey.FromPrivateKey(ocert.KeyPair.PrivateKey, "xxxxx");
            ManagedOpenSsl.NetCore.X509.X509Certificate cert = new ManagedOpenSsl.NetCore.X509.X509Certificate(cert_bio);
            ManagedOpenSsl.NetCore.Core.Stack<ManagedOpenSsl.NetCore.X509.X509Certificate> hmm = new ManagedOpenSsl.NetCore.Core.Stack<ManagedOpenSsl.NetCore.X509.X509Certificate>();

            var pfx = new ManagedOpenSsl.NetCore.X509.PKCS12(password, key, cert, hmm); // <-- 
            ManagedOpenSsl.NetCore.X509.X509Certificate certpfx = pfx.Certificate;

我收到错误

{System.TypeInitializationException:“ManagedOpenSsl.NetCore.Core.Native”的类型初始化程序引发了异常。---> System.BadImageFormatException:尝试加载格式不正确的程序。(HRESULT 的异常:0x8007000B)在 ManagedOpenSsl.NetCore.Core.Version.get_Library() 的 ManagedOpenSsl.NetCore.Core.Native..cctor() 的 ManagedOpenSsl.NetCore.Core.Native.SSLeay() --- 内部结束异常堆栈跟踪 - 在代码行中 `ManagedOpenSsl.NetCore.Core.BIO key_bio = new ManagedOpenSsl.NetCore.Core.BIO(ocert.KeyPair.PrivateKey);

在 Visual Studio 2017 项目属性中,我已将平台目标设置为“任何 CPU”,但问题仍然存在。还有关于如何以pfx.Certificate.pfx 格式保存到特定文件夹的任何实现?任何帮助将不胜感激。一段时间以来一直在努力解决这个问题。

4

1 回答 1

2

由于这是非托管代码,因此您需要具体说明位数。不要针对“任何 CPU”。编译您的项目以获得目标程序的位数。如果您将在 x86 和 x64 进程上使用它,请编译成 2 个不同的二进制文件。

于 2018-02-22T08:29:56.217 回答