我对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,所以我在互联网上尽可能地寻找解决方案,但也许我没有使用正确的措辞。如果你能帮助我,请告诉我。谢谢!