gpt4 book ai didi

c# - 在 C# 中以编程方式将 .crt + .key 文件转换为 X509Certificate2

转载 作者:行者123 更新时间:2023-12-04 01:39:17 36 4
gpt4 key购买 nike

我在 Linux 机器上有一个 .crt 证书和一个 .key 私钥文件。私钥采用加密的 PKCS#8 格式(BEGIN ENCRYPTED PRIVATE KEY...)。我想将这些导入到 X509Certificate2 对象中以供进一步使用。由于我们在 Linux 上,我们使用 .NET Core 2.2(我们还不能迁移到 3.0)。

我已经探索了一些可能的解决方案,详述如下:

  • 使用 openssl将文件转换为 .pfx 并使用 X509Certificate2 导入
  • 我不想使用这个选项,因为我不想从 C# 中执行 shell 代码。我希望该解决方案在 C# 中完全以编程方式实现。
  • 使用 C# BouncyCaSTLe 库执行以下任一操作:
  • 将证书和 key 都转换为 .pfx(如上),或
  • 分别导入证书和私钥并使用 X509Certificate2.CopyWithPrivateKey() 将它们结合起来。
  • 但是,我找不到 BouncyCaSTLe 的 C# 版本的 API,因此我不确定可以使用哪些方法来执行此操作。
  • 我在这里缺少的 C# 中的其他一些编程方法

  • 本质上,最终目标是从 .crt 和 .key 文件中获取 X509Certificate2 对象。任何关于使用什么方法的帮助/见解,甚至是有用的 BouncyCaSTLe 文档的指针,都将不胜感激。谢谢!

    最佳答案

    这在 .NET Core 3.0 中是可能的,尽管不如它应有的友好:

    private static byte[] UnPem(string pem)
    {
    // This is a shortcut that assumes valid PEM
    // -----BEGIN words-----\nbase64\n-----END words-----
    const string Dashes = "-----";
    int index0 = pem.IndexOf(Dashes);
    int index1 = pem.IndexOf('\n', index0 + Dashes.Length);
    int index2 = pem.IndexOf(Dashes, index1 + 1);

    return Convert.FromBase64String(pem.Substring(index1, index2 - index1));
    }

    ...

    string keyPem = File.ReadAllText("private.key");
    byte[] keyDer = UnPem(keyPem);
    X509Certificate2 certWithKey;

    using (X509Certificate2 certOnly = new X509Certificate2("certificate.cer"))
    using (RSA rsa = RSA.Create())
    {
    // For "BEGIN PRIVATE KEY"
    rsa.ImportPkcs8PrivateKey(keyDer, out _);
    certWithKey = certOnly.CopyWithPrivateKey(rsa);
    }

    using (certWithKey)
    {
    Console.WriteLine(certWithKey.HasPrivateKey);
    }

    RSA 私钥可以是三种不同的格式,您需要为每一种调用正确的导入:
  • “开始私钥”:ImportPkcs8PrivateKey
  • “开始加密私钥”:ImportEncryptedPkcs8PrivateKey
  • “开始 RSA 私钥”:ImportRSAPrivateKey
  • 关于c# - 在 C# 中以编程方式将 .crt + .key 文件转换为 X509Certificate2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58173433/

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