从不透明的 pkcs7 p7m 转换为分离的 smime

发布于 2024-12-05 06:57:16 字数 296 浏览 1 评论 0原文

您好,我找不到一种方法来将不透明的 pkcs#7(p7m) 转换为明文分离的 smime,以便常规 mime 库可以处理签名的内容。

我想获取 p7m 文件并将其转换为保留有效签名的 smime 消息。

步骤应该是:

  • 从 p7m 中提取签名内容

  • 从 p7m 中提取 cms 结构

  • 将所有内容打包到新的 smime 结构中分离签名

此操作可能吗?

我搜索过 openssl 手册,但找不到方法。

Hi I couldn't find a way to convert an opaque pkcs#7(p7m) in a clear text deatached smime so that the signed content could be processed by regular mime libraries.

I'd like to take p7m file and convert it to an smime message keping a valid signature.

The steps should be:

  • extract signed content from p7m

  • extract cms structure from p7m

  • pack everything in a new smime structure with detached signature

Is this operation possible ?

I've searched through openssl manuals but I couldn't find a way to do it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心的憧憬 2024-12-12 06:57:16

我能够将不透明的消息转换为具有以下代码的独立消息:

#include <openssl/evp.h>
#include <openssl/bio.h>
#include <openssl/pkcs7.h>

int main(int argc, char **argv)
{
    BIO *data = NULL, *bin = NULL, *bout = NULL;
    PKCS7 *p7, *p7b;

    OpenSSL_add_all_algorithms();

    bin = BIO_new_file("opaque.p7m", "rb");
    p7 = SMIME_read_PKCS7(bin, &data);
    p7b = PKCS7_dup(p7);

    data = PKCS7_dataInit(p7, NULL);

    PKCS7_set_detached(p7b, 1);

    bout = BIO_new_file("detached.p7m", "wb");
    SMIME_write_PKCS7(bout, p7b, data, PKCS7_BINARY | SMIME_DETACHED);
}

要测试程序,我生成了不透明的plipaque.p7m,带有以下命令:

$ openssl smime -sign -in foo.txt -signer my.crt -inkey my.key -nodetach -out opaque.p7m

要成为TERSE,上面的代码没有检查。要接受不同的输入格式,您可以将smime_read_pkcs7更改为pem_read_bio_pkcs7(pem)或d2i_pkcs7_bio(der)。

I was able to convert opaque-signed messages to a detached ones with the following code:

#include <openssl/evp.h>
#include <openssl/bio.h>
#include <openssl/pkcs7.h>

int main(int argc, char **argv)
{
    BIO *data = NULL, *bin = NULL, *bout = NULL;
    PKCS7 *p7, *p7b;

    OpenSSL_add_all_algorithms();

    bin = BIO_new_file("opaque.p7m", "rb");
    p7 = SMIME_read_PKCS7(bin, &data);
    p7b = PKCS7_dup(p7);

    data = PKCS7_dataInit(p7, NULL);

    PKCS7_set_detached(p7b, 1);

    bout = BIO_new_file("detached.p7m", "wb");
    SMIME_write_PKCS7(bout, p7b, data, PKCS7_BINARY | SMIME_DETACHED);
}

To test the program I generate the opaque.p7m with the following command:

$ openssl smime -sign -in foo.txt -signer my.crt -inkey my.key -nodetach -out opaque.p7m

To be terse, the code above has no checks. To accept different input formats, you can change SMIME_read_PKCS7 to PEM_read_bio_PKCS7 (PEM) or d2i_PKCS7_bio (DER).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文