【问题标题】:How do I create self signed certificate with id-ecc for use with ECDSA signature and verification?如何使用 id-ecc 创建自签名证书以用于 ECDSA 签名和验证?
【发布时间】:2019-05-18 02:40:54
【问题描述】:

我正在尝试更新 this article's code 以允许我创建(和使用)基于 ECC 的自签名证书,并使用它创建 do basic signing and verification (ECDSA)。

  • 是否有任何方法可以通过跨平台 .NET Core API 实现这一点,或者是否需要 Win32 P/Invoke?

根据this post,我需要使用the more standard id-ecctype

【问题讨论】:

  • 你真的需要用 C# 代码创建证书吗?使用 openssl 命令行 API 会更简单
  • @Zergatul OpenSSL 未获准在我正在使用的高度受控环境中使用(Bouncy Castle 也不是)
  • 您是否需要即时生成大量证书?如果没有,您可以使用 openssl 生成一次证书,然后在 C# 中使用它。
  • openssl(和充气城堡)在我工作的受限环境中是不允许的。@Zergatul
  • 好吧,如果你不能使用库,那么你可能不得不自己编程,不是吗?我会要求该规则有一个例外,因为编程证书 - 涉及所有 ASN.1 - 并没有任何乐趣。 BC 有一个许可许可证,所以你可以只复制相关部分(当然,对 BC 有适当的贡献声明)。警告:这可能需要一些时间来提取,这将是很多代码。您可能还想查看 .NET 代码本身,它现在也获得了 O/S 许可(我认为是 IANAL)。

标签: .net-core cryptography public-key .net-4.6 self-signed-certificate


【解决方案1】:

有什么方法可以通过跨平台 .NET Core API 实现这一点

是的!

X509Certificate2 cert;

using (ECDsa key = ECDsa.Create(ECCurve.NamedCurves.nistP256))
{
    CertificateRequest request = new CertificateRequest(
        "CN=Self-Signed ECDSA",
        key,
        HashAlgorithmName.SHA256);

    request.CertificateExtensions.Add(
        new X509KeyUsageExtension(X509KeyUsageFlags.DigitalSignature, critical: false));

    request.CertificateExtensions.Add(
        new X509BasicConstraintsExtension(false, false, 0, false));

    // If it was for TLS, then Subject Alternative Names and
    // Extended (Enhanced) Key Usages would also be useful.

    DateTimeOffset start = DateTimeOffset.UtcNow;

    cert = request.CreateSelfSigned(notBefore: start, notAfter: start.AddMonths(3));
}

// If you want to save a PFX or something, you can do so now.

【讨论】:

  • 需要 .NET 7.1。我希望我能提出一个足够有说服力的论据来切换!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-11
  • 2016-03-30
  • 2016-06-24
  • 1970-01-01
  • 2011-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多