Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用.NET OpenSSL包装对文件进行签名_C#_.net_Openssl_Pkcs#7_X509 - Fatal编程技术网

C# 使用.NET OpenSSL包装对文件进行签名

C# 使用.NET OpenSSL包装对文件进行签名,c#,.net,openssl,pkcs#7,x509,C#,.net,Openssl,Pkcs#7,X509,我想抄这行 openssl smime -sign -signer <chain_crt_file> -in <infile> -out <outfile> -inkey <privatekey> -outform der 我正在导入链证书和解码的私钥。 现在的问题是如何签署一个文件,并将其导出为DER。 OpenSSL.NET wrapper缺少文档,我在internet上找到的示例是“如何使用公钥/私钥加密和解密消息”,这里没有这种情况 为了

我想抄这行

openssl smime -sign -signer <chain_crt_file> -in <infile> -out <outfile> -inkey <privatekey> -outform der
我正在导入链证书和解码的私钥。 现在的问题是如何签署一个文件,并将其导出为DER。 OpenSSL.NET wrapper缺少文档,我在internet上找到的示例是“如何使用公钥/私钥加密和解密消息”,这里没有这种情况

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

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

非常感谢你的帮助

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

OpenSSL源代码可能是一个很好的起点。OpenSSL为
/apps/smime.c
中的
smime
提供了源代码

OpenSSL的
smime
实用程序只需使用适当的参数调用
PKCS7\u-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\u sign,您可以访问OpenSSL的文档,网址为。或者,你可以寻找一个例子


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

是否需要OpenSSL包装器?您可以使用带有私钥的x509 cert对任何数据进行签名,并且您是否阅读了上的“使用RSA私钥对数据进行7.12签名”?谢谢您的参考。显然不需要包装器,因为我按照您的建议使用了PKCS12文件,因为.NET加密类完全支持该文件。我发现的解决方案非常简单,但不幸的是,包装器中的PCKS7对象并没有sign方法。谢谢。@Mike-他们提供CMS包装吗?我认为这是用OpenSSL剥猫皮的另一种方法。
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;
        }
        ...