我一直面临着让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:类型初始值设定项 &#39; ManagedOpenSsl.NetCore.Core.Native&#39;抛出一个例外。 ---&GT; System.BadImageFormatException:尝试加载程序 格式不正确。 (来自HRESULT的异常:0x8007000B)at ManagedOpenSsl.NetCore.Core.Native.SSLeay()at ManagedOpenSsl.NetCore.Core.Version.get_Library()at ManagedOpenSsl.NetCore.Core.Native..cctor()---内部结束 异常堆栈跟踪 - 在代码行中 `ManagedOpenSsl.NetCore.Core.BIO key_bio = new ManagedOpenSsl.NetCore.Core.BIO(ocert.KeyPair.PrivateKey);
在Visual Studio 2017项目属性中,我已将平台目标设置为&#34;任何CPU&#34;,仍然会出现问题。还有关于如何将pfx.Certificate
保存为.pfx格式的特定文件夹的任何实现?任何帮助将不胜感激。一段时间以来一直在努力解决这个问题。
答案 0 :(得分:1)
由于这是非托管代码,因此您需要具体了解位数。不要以“任何CPU”为目标。编译项目以获得目标程序的位数。如果要在x86和x64进程上使用它,请编译为2个不同的二进制文件。