【问题标题】:Extract detached PKCS7 signature from PKCS7 (signature&data)从 PKCS7 中提取分离的 PKCS7 签名(签名和数据)
【发布时间】:2014-08-03 14:10:52
【问题描述】:

我想将包含数据 + 签名的 PKCS7 签名分解为单独的:python 中的原始数据和分离的 PKCS7 签名。

我可以从签名中获取数据,因为验证例程返回它,但是我怎样才能获得分离的签名?

def verify_pkcs7(data_bio, signature_bio, cacert_bio, format=X509.FORMAT_PEM):
    sm_obj = SMIME.SMIME()
    st = X509.X509_Store()

    st.add_cert(X509.load_cert_string(cacert_bio))
    sm_obj.set_x509_store(st)


    if format == X509.FORMAT_PEM:
        p7 = SMIME.load_pkcs7_bio(signature_bio)
    else:
        p7 = SMIME.PKCS7(m2.pkcs7_read_bio_der(signature_bio._ptr()), 1)


    sk = p7.get0_signers(X509.X509_Stack())
    sm_obj.set_x509_stack(sk)

    try:
        v = sm_obj.verify(p7, data_bio)
        if v:
            print "Client signature verified."
            with open('file.rar', 'wb') as ff:
                ff.write(v)
    except Exception as e:
        print str(e)
        print "*** INVALID CLIENT MESSAGE SIGNATURE ***"

我的疯狂猜测是它是 these 函数之一。我的假设基于 M2Crypto 是 OpenSSL 的包装器这一事实。

【问题讨论】:

  • 我有一个 data.txt,这是我要签名的数据,我正在创建一个 PKCS7 签名,它由以下内容组成:data.txt + signature( of data.txt) = pkcs7 签名.现在我收到了 pkcs7 签名,我想将原始 data.txt 和签名提取到 2 个不同的文件中。

标签: python openssl m2crypto


【解决方案1】:

M2Crypto.SMIME.smime_load_pkcs7_bio 函数将获取包含 SMIME 消息(由消息数据和 PKCS7 签名组成)的 BIO 缓冲区并返回两个值的元组:PKCS7 对象和 @987654326 @ 包含消息数据。您可以通过将其.write(buf) 与另一个BIO 一起使用以文本形式获取PKCS7 签名。

但是,请注意 M2Crypto(仍然)不支持 Python 3,因此您将被限制为 2.7。

关于此的 M2Crypto“文档”不值得链接,但这似乎是使用的底层 OpenSSL 功能:http://wiki.openssl.org/index.php/Manual:SMIME_read_PKCS7(3)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 1970-01-01
    相关资源
    最近更新 更多