2

私は最近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で使用する証明書に関係なく。

例外は次のとおりです。

エラー:0D0A706C:asn1エンコーディングルーチン:PKCS5_pbe2_set:暗号にオブジェクト識別子がありませんエラー:2307D00D:PKCS12ルーチン:PKCS8_encrypt:ASN1lib

他の暗号タイプを指定すると、必ず秘密鍵がエクスポートされるため、この部分は正常に機能することがわかっています。誰か提案がありますか?

4

2 に答える 2

2

使用できない理由:

    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());
于 2010-06-21T15:58:25.950 に答える
0

私は実際にはそれを使用しませんが、おそらくこれは役立つかもしれません:

SSLがプロトコルレベルでデバッグされる開発システム用にOpenSSLをコンパイルする場合は、コマンド-DSSL_FORBID_ENULLを省略できます。-DSSL_FORBID_ENULLにより、OpenSSLはSSL暗号スイートのnull暗号を省略します。ヌル暗号は、クリアテキスト(暗号化されていない情報)がワイヤを通過することを許可します。ヌル暗号は機密性を提供せず、実動システムでの使用は推奨されません。

于 2010-06-19T05:50:21.780 に答える