OpenSSL从x509证书中提取encryptedKeyPackage

时间:2017-07-11 00:40:40

标签: c openssl x509 asn.1 der

我对OpenSSL很新(已经使用了两天)。我正在使用OpenSSL版本1.0.1,并且我试图实现OpenSSL函数以从ASN.1(DER编码)signedData包中提取特定的x509 OID(特别是,OID是2.16。 840.1.101.2.1.2.78.2,id-ct-KP-encryptedKeyPkg)。就目前而言,我只是试图拥有一个可以从给定任何ASN.1编码包的包中提取这些数据的程序。我可以使用以下代码将证书编码到缓冲区中:

#include <openssl/x509.h>

int main()
{
    /* for brevity, please assume "encrypted" points to a DER-encoded buffer */
    char* encrypted = malloc( 3000 ); 
    int sizeOfEncrypted = 3000;       // assume this number is correct

    BIO* bp = BIO_new( BIO_s_mem() );
    ASN1_parse( bp, (unsigned char*) encrypted, (long) encryptedSize, 4 );

    BUF_MEM *bptr;
    BIO_get_mem_ptr( bp, &bptr );
    BIO_set_close( bp, BIO_NOCLOSE );
    BIO_free( bp );

    return 0;
}

如果我写了&#34; bptr&#34;指向的缓冲区的字节。到文件,我得到编码数据的所有字段,类似于输出:

 $ openssl asn1parse -inform DER -in my_pkg.dat -i

我已经确认数据是正确的,但现在正如我所提到的,我正在寻找正确的OpenSSL指令来提取特定的OID(因此,而不是X509_get_version(),它将类似于X509_get_encryptedKeyPkg (),本身,特定的OID)。我怎样才能做到这一点?我可以编写只搜索证书中的OID的代码,并且可以解析我需要的数据,但我几乎可以肯定/希望OpenSSL已经有了工具来做到这一点,而且更可靠。再一次,我是一个OpenSSL noobie,所以我在互联网上尽可能地寻找解决方案,但也许我没有使用正确的措辞。如果你能帮助我,请告诉我。谢谢!

0 个答案:

没有答案