6

こんにちは、署名されたコンテンツを通常の MIME ライブラリで処理できるように、不透明な pkcs#7(p7m) をクリア テキストの分離された smime に変換する方法が見つかりませんでした。

p7m ファイルを取得して、有効な署名を保持する smime メッセージに変換したいと思います。

手順は次のとおりです。

  • p7m から署名されたコンテンツを抽出する

  • p7m から cms 構造を抽出する

  • 分離された署名を使用して、すべてを新しい smime 構造にパックします

この操作は可能ですか?

openssl のマニュアルを検索しましたが、それを行う方法が見つかりませんでした。

4

1 に答える 1

1

次のコードを使用して、不透明な署名付きメッセージを分離されたメッセージに変換できました。

#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);
}

プログラムをテストするために、次のコマンドで opaque.p7m を生成します。

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

簡潔に言うと、上記のコードにはチェックがありません。SMIME_read_PKCS7異なる入力形式を受け入れるには、PEM_read_bio_PKCS7(PEM) またはd2i_PKCS7_bio(DER)に変更できます。

于 2013-12-04T15:39:24.603 に答える