Max*_*xim 3 c# bouncycastle ssl-certificate x509certificate .net-standard
我需要生成BouncyCastle的转换X509Certificate到X509Certificate2使用私钥在产生越来越加载.NET标准 X509Certificate2的对象.那可能吗?
对于类似的问题/sf/answers/570555961/有一个答案,但在生成BouncyCastle证书并将其转换为.NET后X509Certificate2,生成的对象的HasPrivateKey属性设置为"false".
我需要将一个证书和一个私钥(没有页眉和页脚的单独的Base64字符串)加载到一个X509Certificate2对象,以便从.NET Standard 1.6库将其传递给应用程序.问题是,.NET Standard 中的类没有PrivateKey属性X509Certificate2!因此,实际在X509Certificate2对象中加载私钥的唯一方法是将它与证书本身在.pfx文件中组合,并在构造函数中加载它.
我有建议使用BouncyCastle(/sf/answers/3112617581/),所以我首先X509Certificate从Base64字符串生成一个BouncyCastle ,然后尝试将其转换为X509Certificate2保留私钥.
小智 6
我发现的最好方法是通过内存中的PFX流.假设你已经在"bcCert"装载了你的充气城堡证书.注意:如果您要在任何地方保存.NET X509Certificate2,那么"别名"就是稍后在UI中调用的内容,否则它是无关紧要的(除了两个调用需要相同)
using Org.BouncyCastle.Pkcs;
using Org.BouncyCastle.Security;
using System.IO;
using System.Security.Cryptography.X509Certificates
var pkcs12Store = new Pkcs12Store();
var certEntry = new X509CertificateEntry(bcCert);
pkcs12Store.SetCertificateEntry(alias, certEntry);
pkcs12Store.SetKeyEntry(alias, new AsymmetricKeyEntry(certKey.Private), new[] { certEntry });
X509Certificate2 keyedCert;
using (MemoryStream pfxStream = new MemoryStream())
{
pkcs12Store.Save(pfxStream, null, new SecureRandom());
pfxStream.Seek(0, SeekOrigin.Begin);
keyedCert = new X509Certificate2(pfxStream.ToArray());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1378 次 |
| 最近记录: |