【问题标题】:PKCS#7 Signed Code Image extractingPKCS#7 签名代码图像提取
【发布时间】:2010-05-12 09:31:15
【问题描述】:

我想使用 C/CPP 从 PKCS#7 签名代码图像中提取签名者信息。我想知道openssl API。 I am Able to extract Using bouncy castle (CMSSignedData).

请告诉我可以在 C/CPP 中使用的 openssl API 来提取每个签名者和签名者信息并验证签名者。

有没有像 X509_LOOKUP_buffer() 这样的 API 而不是 X509_LOOKUP_file() ???

提前感谢opensid

【问题讨论】:

    标签: openssl x509certificate x509 pkcs#7


    【解决方案1】:

    我遇到了类似的问题。我必须从 PKCS#7 签名中提取signingTime 属性。我在 Internet 上找不到最终的解决方案,但我可以从各个地方挑选一些零碎的东西,然后想到了这个。也许有更好/更好/更安全的方法,这是我第一次这样做,但它似乎有效。

    在一个函数中,我在 const void *p_pkcs7Sig 指向的缓冲区中有 p_pkcs7SigSize 字节的 PKCS#7 签名。我由此获得了签约时间。我已经删除了错误处理,不要使用冗长的代码!

    BIO                         *v_in          = NULL;
    PKCS7                       *v_p7          = NULL;
    STACK_OF(PKCS7_SIGNER_INFO) *v_signerInfos = NULL;
    PKCS7_SIGNER_INFO           *v_signerInfo  = NULL;
    ASN1_TYPE                   *v_asn1SigningTime  = NULL;
    
    /* make BIO for input buffer */
    v_in = BIO_new_mem_buf( (void*)(uintptr_t) p_pkcs7Sig, p_pkcs7SigSize );
    
    /* make a PKCS7 object of it */
    v_p7 = d2i_PKCS7_bio( v_in, NULL);
    
    /* get all signer infos */
    v_signerInfos = PKCS7_get_signer_info( v_p7 );
    
    /* if you need all signer infos then loop through all, 
     * count you get by k_PKCS7_SIGNER_INFO_num(v_signerInfos) 
     */
    
    /* get the first signer info */
    v_signerInfo = sk_PKCS7_SIGNER_INFO_value(v_signerInfos,0);
    
    /* get signing time */
    v_asn1SigningTime = PKCS7_get_signed_attribute( v_signerInfo, NID_pkcs9_signingTime );
    
    /* You should got a v_asn1SigningTime->type == V_ASN1_UTCTIME, 
     * if yes then the actual value is in the string buffer at
     * v_asn1SigningTime->value.utctime->data 
     */
    
    if ( v_in )
    {
       BIO_free_all( v_in );
       v_in = NULL;
    }
    

    【讨论】:

    • Fudaraku,是否可以从 PKCS7 签名代码映像中获取签名内容?​​
    • 您好,我得到了答案,感谢您的支持。 “aaa = PKCS7_verify(p7,证书,NULL,在,NULL,PKCS7_NOVERIFY);”为验证工作。用于复制签名内容“aaa = PKCS7_verify(p7, certs, NULL, in, out, PKCS7_NOVERIFY);”作品。字符 *p;长尺寸; lSize = BIO_get_mem_data(out, &p); p 包含签名的内容。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多