【问题标题】:OpenSSL.NET can't export private key with null CipherOpenSSL.NET 无法导出具有空密码的私钥
【发布时间】:2010-06-11 23:14:47
【问题描述】:

我最近发现了OpenSSL.NET,它是一个非常可爱的小包装。

我正在尝试执行以下代码:

    public static void DoSomething(byte[] buf)
    {
        OpenSSL.Core.BIO input = new OpenSSL.Core.BIO(buf);
        OpenSSL.X509.X509Certificate b = OpenSSL.X509.X509Certificate.FromPKCS12(input, "passphrase");
        OpenSSL.Core.BIO outs = OpenSSL.Core.BIO.MemoryBuffer(false);
        b.PrivateKey.WritePrivateKey(outs, OpenSSL.Crypto.Cipher.Null, "passphrase");
        outs.SetClose(OpenSSL.Core.BIO.CloseOption.Close);
        Console.WriteLine(outs.ReadString());
    }

问题出现在“b.PrivateKey.WritePrivateKey(..”行。我想在没有任何加密的情况下写出私钥。根据规范,如果我使用 Null 密码类型,这应该可以解决问题,但它无论我在 buf 中使用什么证书,都无法正常工作。

这是一个例外:

error:0D0A706C:asn1 encoding routines:PKCS5_pbe2_set:cipher has no object identifier 错误:2307D00D:PKCS12 例程:PKCS8_encrypt:ASN1 库

我知道这部分工作正常,因为如果我指定任何其他密码类型,它会毫无失败地导出私钥。有人有什么建议吗?

【问题讨论】:

    标签: .net openssl private-key


    【解决方案1】:

    为什么不能使用:

        OpenSSL.Core.BIO outs = OpenSSL.Core.BIO.MemoryBuffer(false);
        outs.Write(b.PrivateKey.ToString());
        outs.SetClose(OpenSSL.Core.BIO.CloseOption.Close);
        Console.WriteLine(outs.ReadString());
    

    这样您就可以编写未加密的密钥。

    我明白了,把它改成:

        OpenSSL.Core.BIO outs = OpenSSL.Core.BIO.MemoryBuffer(false);
        outs.Write(b.PrivateKey.GetRSA().PrivateKeyAsPEM);
        outs.SetClose(OpenSSL.Core.BIO.CloseOption.Close);
        Console.WriteLine(outs.ReadString());
    

    【讨论】:

    • PrivateKey.ToString() 创建私钥的 ascii(人类可读)表示。确实存在所有数据,但我正在寻找原始/未加密的二进制私钥数据。
    【解决方案2】:

    我并没有真正使用它,但也许这可能会有所帮助:

    如果 OpenSSL 正在为一个 SSL将在其中开发系统 在协议级别进行调试, 省略命令 -DSSL_FORBID_ENULL 是可以接受的。 -DSSL_FORBID_ENULL 导致 OpenSSL 在 SSL 密码中省略空密码 套房。空密码允许明文 (未加密信息)遍历 电线。空密码不提供 保密,不鼓励 用于生产系统。

    【讨论】:

      猜你喜欢
      • 2011-01-03
      • 2011-11-06
      • 2017-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多