当前位置: 首页 > 知识库问答 >
问题:

如何从Bouncy Castle创建用于AuthenticateasServer的X509证书?

栾弘新
2023-03-14

我已经使用Bouncy Castle创建了X509证书,但我不能与SSLStream.AuthenticateasServerSSLStream.AuthenticateasClient一起使用,因为它们(当然)使用的是.NET版本。虽然Bouncy Castle中有一个转换器DotNetUtilities.tox509Certificate(),它接受一个BC X509并返回一个.NET X509。问题似乎是AuthenticateasServer/AuthenticateasClient需要包含私钥的证书。至少当我尝试转换并使用新证书时,在尝试使用SSLStream进行连接时会得到CryptographicException:“Key doesnot exist”

所以我想我需要从Bouncy Castle创建一个X509Certificate2,因为它也可以包含私钥。但我发现的解决方案似乎有点...奇怪,我想知道现在是否还有其他人可以更好地将BC X509Certificate与SSLStream一起使用。

private static X509Certificate CreateDotNetCertificate(Org.BouncyCastle.X509.X509Certificate certificate, AsymmetricCipherKeyPair keyPair)
{
   var store = new Pkcs12Store();
   string friendlyName = certificate.SubjectDN.ToString();
   var certificateEntry = new X509CertificateEntry(certificate);
   store.SetCertificateEntry(friendlyName, certificateEntry);
   store.SetKeyEntry(friendlyName, new AsymmetricKeyEntry(keyPair.Private), new[] { certificateEntry });

   var stream = new MemoryStream();
   var password = "a password";
   store.Save(stream, password.ToCharArray(), new SecureRandom(randomGenerator));

   return new X509Certificate2(stream.ToArray(), password, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
}

解决方案摘自本博客:http://blog.differentpla.net/post/20

共有1个答案

傅新
2023-03-14

Windows使用Windows证书存储中存储的证书。我不知道BouncyCastle是否提供了对Windows CertStorage的直接访问,但如果它不提供,那么唯一的选择就是将证书从文件(或其他源)导入到CertStorage中,然后使用它。PKCS#12是将证书与其私钥一起传输的正确格式,因此使用它作为中间介质是很自然的。

 类似资料:
  • 问题内容: 是否可以在不使用Bouncy Castle 类的情况下用Java代码合理地创建X509证书? 问题答案: 签名证书的能力不是标准Java库或扩展的一部分。 您自己需要做的许多代码都是核心的一部分。有一些类可以编码和解码X.500名称,X.509证书扩展,各种算法的公钥,当然还有用于实际执行数字签名的类。 自己实施这项工作并非易事,但绝对是可行的-我第一次制作可用于证书签名的原型时,可能

  • 我想用Java语言创建一个X509证书,然后从中提取公钥。 我在网上搜索了一下,发现了很多代码示例,但都有错误(未知变量或未知类型),或者有很多警告说:“方法...来自类型...是不建议使用的”等。 例如,以下代码不起作用的原因: 谁能告诉我如何使用纯Java或Bouncy Castle创建证书,然后从中获取公钥? 谢谢大家。

  • 我是否能够使用Android或BouncyCastle libs从CA签名的X509客户端证书中提取证书链信息? 我有一个Android客户端,它从受信任的服务器接收CA签名的X509证书。我想将签名的客户端证书和我的私钥保存到PKCS12(. p12)文件中。我目前正在通过创建一个对象并添加证书和私钥来执行此操作。当我使用方法添加客户端时,是最后一个参数,它当前仅包含客户端证书。这是否会阻止我的

  • 我已经尝试了各种方法,通过导入一个基于BouncyCastle的X509Certificate实例和相关的私钥(RsaPrivateCrtKeyParameters)。NET X509Certificate2一个RSACryptServiceProvider实例,并将其保存到证书存储区(NET的X509Store,My/CurrentUser)。 在证书存储MMC管理单元中,似乎有一个与证书相关联

  • 伙计们!我正在尝试使用bouncycastle创建X.509证书,它应该由另一个证书签名并存储它的PEM base 64格式。 我已经有了自签名证书(公钥和私钥)。现在我要创建一个新的,并用现有的自签名证书签名。 验证无例外地通过了,这意味着从我的观点来看,它是由Cacert成功签署的: 然后将其解码到PEM base 64:

  • 我想生成一个自签名SSL证书,并将其与Tomcat一起使用。 我怎么能这样呢?