如何使用OpenSSL API检查证书或CRL文件的格式?

如何使用OpenSSL API检查证书或CRL文件的格式?,openssl,ssl-certificate,Openssl,Ssl Certificate,我正在编写一段代码,它可以将PEM和DER编码的证书和CRL文件解析为内部结构。是否有任何方法可以使用openSSL以编程方式检查输入文件的格式 要读取PEM文件,请使用PEM_read_X509();要读取DER文件,请使用d2i_X509()。我想使用if条件在它们之间切换 更具体地说, 我有一个CRL文件,其路径存储在一个名为“CRLFileName”的字符串中 crlbio = BIO_new(BIO_s_file()); if (BIO_read_filename(crlbio, C

我正在编写一段代码,它可以将PEM和DER编码的证书和CRL文件解析为内部结构。是否有任何方法可以使用openSSL以编程方式检查输入文件的格式

要读取PEM文件,请使用
PEM_read_X509()
;要读取DER文件,请使用
d2i_X509()
。我想使用
if
条件在它们之间切换


更具体地说,

我有一个CRL文件,其路径存储在一个名为“CRLFileName”的字符串中

crlbio = BIO_new(BIO_s_file());
if (BIO_read_filename(crlbio, CRLFileName.c_str()) <= 0)
{
        cout<<"Error loading CRL into memory."<<endl;
}

X509_CRL *crl = d2i_X509_CRL_bio(crlbio,NULL);
//if (format == FORMAT_PEM) crl=PEM_read_bio_X509_CRL(bio,NULL,NULL,NULL);
crlbio=BIO_new(BIO_s_file());

如果(BIO_read_filename(crlbio,CRLFileName.c_str()),唯一确定的方法是两种方法都尝试,但是作为一种好的启发式方法,cert或CRL(以及大多数其他东西)的DER文件总是以字节0x30开头(ASCII中的aka char“0”)(这是DER中序列+复合的标记).Note file BIO支持查找,但并非所有其他BIOs都支持。唯一确保这两种方法都可以尝试,但作为一种好的启发式方法,cert或CRL(以及大多数其他内容)的DER文件总是以字节0x30(ASCII中的aka char“0”)开始(这是DER中序列+复合的标记).Note文件BIO支持查找,但并非所有其他BIOs都支持。