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

将基于ECC的证书从Windows证书存储导入CngKey

茹元魁
2023-03-14
    null

有什么想法吗?我一筹莫展...任何帮助都将不胜感激。

共有1个答案

陆文博
2023-03-14

您需要从证书的公钥(certificate.PublicKey.EncodedKeyValue.RawData)创建CngKey:

CngKey包含8个额外的字节,前4个字节(所谓的magic)用于所用曲线的名称(对于ECDSA:ECS1、ECS3或ECS5,对于ECDH:ECK1、ECK3、ECK5),后4个是密钥的长度,包括。衬垫(32、48或66)。

从证书中删除公钥的第一个字节(因为对于ECDSA公钥,它始终是0x04)。

var keyData = certificate.PublicKey.EncodedKeyValue.RawData.Skip(1).ToArray();
var keySize = BitConverter.GetBytes(keyData.Length/2);
var magic = Encoding.ASCII.GetBytes("ECS1").Concat()

var eccPublicBlobValue = magic.Concat(keySize).Concat(keyData).ToArray();
var cngKey = CngKey.Import(eccPublicBlobValue, CngKeyBlobFormat.EccPublicBlob);

var ecdsaCng = new ECDsaCng(cngKey);
return ecdsaCng.VerifyData(encodedBytes, signature);
 类似资料:
  • 我已经尝试了各种方法,通过导入一个基于BouncyCastle的X509Certificate实例和相关的私钥(RsaPrivateCrtKeyParameters)。NET X509Certificate2一个RSACryptServiceProvider实例,并将其保存到证书存储区(NET的X509Store,My/CurrentUser)。 在证书存储MMC管理单元中,似乎有一个与证书相关联

  • 我有一个java服务器,它正试图通过SSL连接到外部Ldap服务器(作为客户端来执行查询)。 我在连接时遇到了麻烦,因为他们在连接时发送给我的证书仅在我的本地窗口信任库中受信任,但在java信任库(cacerts)中不存在。 有没有办法告诉Java信任windows信任的任何证书? 或者,有没有一种方法可以将所有受信任的证书从窗口信任库导入到Java的cacerts? 任何想法都将不胜感激。

  • 我想写一些可以枚举和使用(签名)证书在货币用户/我和LocalMachine/我,但我还没有能够找到任何Windows证书存储,只有Java自己的秘密存储。这个链接看起来很有希望,但我只能使用Java。 我以前在SO上发现过这个问题,但这是五年前的问题,在计算机时代是很长的时间了。谢谢!

  • 问题内容: 如何将Java创建的SSL证书导入Eclipse中的项目? 问题答案: 可能您想在JRE的trustcacerts中导入一个“伪” SSL证书,以避免证书无效的问题。是不是 正如乔恩所说,您可以使用keytool来完成这项工作: 询问时,请使用“ changeit”作为默认密码感谢BrianClozel。确保在服务器或启动配置上使用此运行时。

  • 我会非常感谢任何能指引我正确方向的人。

  • 我有所有需要导入apache tomcat的文件,即: 证书申请文件(CSR文件) RSA私钥文件 证书颁发机构发送给我的证书(根证书、中间证书和实体/域) 现在我需要将它们导入我的ApacheTomcat服务器。 我的问题是,鉴于我尚未为我的服务器创建任何密钥存储(CSR和私钥已发送给我,我没有使用keytool等工具创建它们),下一步该怎么做?我需要通过keytool-genkey命令(哪个别