【问题标题】:Sign file using .NET OpenSSL wrapper使用 .NET OpenSSL 包装器签名文件
【发布时间】:2014-03-17 22:50:54
【问题描述】:

我试图复制这一行

openssl smime -sign -signer <chain_crt_file> -in <infile> -out <outfile> -inkey <privatekey> -outform der

进入 C# 然而它并没有我想象的那么容易。到目前为止我只到了这一点

OpenSSL.Core.BIO crtBio = OpenSSL.Core.BIO.File("C:/asl/chain.crt", "r");
OpenSSL.Core.BIO keyBio = OpenSSL.Core.BIO.File("C:/asl/keydec.txt", "r");
OpenSSL.X509.X509Chain crt = new OpenSSL.X509.X509Chain(crtBio);
OpenSSL.Crypto.RSA key = OpenSSL.Crypto.RSA.FromPrivateKey(keyBio);

String str = "test";
byte[] bytes = new byte[str.Length * sizeof(char)];
System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);

我在哪里(希望)导入链证书和解码的私钥。 现在的问题是如何签署文件并导出为 DER。 OpenSSL.NET 包装器缺少文档,我在互联网上找到的示例是“如何使用公钥/私钥加密和解密消息”,这不是这里的情况。

为了开始我尝试签署这个“测试”字符串(因为文件输入/输出应该非常简单)但我不知道从哪里开始。

问题是我需要签署这个字符串,因此我需要密钥和证书链。

非常感谢您的帮助。

【问题讨论】:

  • 是否需要 OpenSSL 包装器?您可以使用带有私钥和SignedCms .Net class 的 x509 证书对任何数据进行签名您是否阅读了etutorials.org 上的“7.12 使用 RSA 私钥签名数据”?
  • 感谢您的参考。显然不需要包装器,因为我遵循了您的建议并使用了 PKCS12 文件,因为 .NET Cryptography 类完全支持它。我找到的解决方案很简单,stackoverflow.com/questions/11526572/…

标签: c# .net openssl pkcs#7 x509


【解决方案1】:

为了开始我尝试签署这个“测试”字符串(因为文件输入/输出应该非常简单)但我不知道从哪里开始。

OpenSSL 源代码可能是一个不错的起点。 OpenSSL 在&lt;openssl dir&gt;/apps/smime.c 中提供了smime 的来源。

OpenSSL 的smime 实用程序只需使用适当的参数调用PKCS7_sign。从第 688 行开始:

else if (operation & SMIME_SIGNERS)
    {
    int i;
    /* If detached data content we only enable streaming if
     * S/MIME output format.
     */
    if (operation == SMIME_SIGN)
        {
        if (flags & PKCS7_DETACHED)
            {
            if (outformat == FORMAT_SMIME)
                flags |= PKCS7_STREAM;
            }
            else if (indef)
                flags |= PKCS7_STREAM;

           flags |= PKCS7_PARTIAL;
           p7 = PKCS7_sign(NULL, NULL, other, in, flags);
           if (!p7)
               goto end;
        }
        ...

了解PKCS7_sign,您可以访问OpenSSL 的文档PKCS7_sign(3)。或者,您可以寻找一个例子。

我不知道您使用的包装器。

【讨论】:

  • 这可行,但不幸的是,该包装器中的 PCKS7 对象没有符号方法。无论如何,谢谢。
  • @Mike - 他们提供 CMS 包装器吗?我认为这是用 OpenSSL 给猫剥皮的另一种方法。
猜你喜欢
  • 2020-01-13
  • 2011-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-02
  • 1970-01-01
  • 2011-04-25
相关资源
最近更新 更多