gpt4 book ai didi

c# - 从 ECC X509Certificate 创建 X509Certificate2 在 C# 中抛出 'System.NotSupportedException'

转载 作者:行者123 更新时间:2023-12-02 02:24:56 24 4
gpt4 key购买 nike

我需要将 ECC 证书导入到 C# 中的 Windows key 存储中。第一步,我使用 BouncyCaSTLe 生成 EC key 对,使用公钥创建 X509 证书,并使用 ECDSA 和私钥对其进行签名,即:

            var ecKeyPairGenerator = new ECKeyPairGenerator("ECDSA");
ECKeyGenerationParameters ecKeyGenParams =
new ECKeyGenerationParameters(SecObjectIdentifiers.SecP384r1, new SecureRandom());
ecKeyPairGenerator.Init(ecKeyGenParams);
AsymmetricCipherKeyPair pair = ecKeyPairGenerator.GenerateKeyPair();
PrivateKeyInfo privKeyInfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo(pair.Private);
SubjectPublicKeyInfo pubKeyInfo = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(pair.Public);

X509V3CertificateGenerator bcX509Gen = new X509V3CertificateGenerator();
// set cert fields
...
bcX509Gen.SetPublicKey(pair.Public);
Asn1SignatureFactory bcSigFactory =
new Asn1SignatureFactory(X9ObjectIdentifiers.ECDsaWithSha384.Id, pair.Private);
X509Certificate bcCert = bcX509Gen.Generate(bcSigFactory);

然后,我使用上面创建的证书创建一个 X509Certificate2,即:

    SystemX509.X509Certificate2 msCert2 = 
new SystemX509.X509Certificate2(bcCert.GetEncoded(), (string)null);

但是,创建 X509Certificate2 时出现异常:

'msCert2.PublicKey.Key' threw an exception of type 'System.NotSupportedException'
"The certificate key algorithm is not supported."

使用 BC 的 DotNetUtilities.ToX509Certificate() 会导致相同的异常。

我知道 Windows/.NET 上对 ECC 证书的支持可能不完整,但我在网上的搜索似乎表明这应该是可能的?你知道我做错了什么吗?

仅供引用,我使用的是 VS Community 2017,我的项目的目标是 .NET Framework 4.6.2。

谢谢!

最佳答案

PublicKey.Key 已被非正式弃用(与 PrivateKey 一起)。它不支持 ECC,并且不会生成能够执行 OAEP-SHA-2 加密的 RSA key 或能够执行 FIPS 186-3 DSA 的 DSA key 。

相反,您想使用不需要转换的扩展方法:

// GetECDsaPublicKey returns a unique object every call,
// so you're responsible for Disposing it (lest it end up on the Finalizer queue)
using (ECDsa ecdsa = msCert2.GetECDsaPublicKey())
{
// do stuff with the public key object
}

关于c# - 从 ECC X509Certificate 创建 X509Certificate2 在 C# 中抛出 'System.NotSupportedException',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45107057/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com