【问题标题】:Create CngKey from cert in localmachine store for use with ECDsaCng(CngKey)?从本地机器存储中的证书创建 CngKey 以与 ECDsaCng(CngKey) 一起使用?
【发布时间】:2014-03-29 10:07:45
【问题描述】:

我一直在尝试围绕 ECDsaCng、CngKey 和有效的 EC 证书进行签名。该证书由“Symantec Class 3 ECC 256 bit Extended Validation CA”颁发,签名算法为“sha256ECDSA”,签名哈希算法为“sha256”,公钥参数=“ECDSA_P256”,密钥用法=“数字签名( 80)"。

除了 ECDsaCng 之外,我还尝试过将 JwtSecurityTokenHandler 与证书一起使用,但出现“不支持证书算法”异常。使用“标准”2048 位 SSL 证书可以正常工作。

我需要做的是使用 ES256 签署 JWT,到目前为止,这只能通过使用带有 ECDsaCng 的 256 位“随机生成”密钥来工作,所以回答这些问题中的任何一个都会让我很开心:

  1. 如何订购可与 JwtSecurityTokenHandler 一起使用以进行 ES256 签名的有效证书?

  2. 如何从商店中的证书创建 CngKey? (证书的私钥不可导出。)

  3. 有没有其他方法可以使用 ES256 和无法从商店导出的证书私钥进行签名?

非常感谢任何帮助!

最好的问候,

亨里克

【问题讨论】:

  • 你有什么运气吗?
  • 是和不是。我不得不使用本地生成的私钥/公钥对。我目前的工作理论是,SSL 证书(任何类型)不能用于在 Microsoft Cng 中签名,因为这似乎强制证书不应同时具有“服务器身份验证”和“代码签名”密钥用法。签名证书应仅具有“代码签名”密钥用法。

标签: c# x509certificate signing elliptic-curve jwt


【解决方案1】:

.NET 4.6.1 显着增加了对执行 ECDSA 的支持。特别是GetECDsaPrivateKey (extension) method

由于签名和验证方法位于 ECDsa 基类(从 .NET 4.6.1 开始),因此您实际上不需要直接使用 ECDsaCng 类型,除非您尝试与命名系统密钥进行交互或其他直接系统互操作。

【讨论】:

    猜你喜欢
    • 2014-05-10
    • 2012-03-13
    • 2020-07-01
    • 2017-09-29
    • 2013-07-29
    • 1970-01-01
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    相关资源
    最近更新 更多