openssl 的 d2i_X509 抱怨“错误标签”

openssl 的 d2i_X509 抱怨“错误标签”

尝试从 minecraft 服务器身份验证协议解析 DER 密钥。 openssl asn1parse -inform DER正确解析了密钥,但是当我尝试使用d2i_X509C 中的函数来解析该数据时,我收到 null,并且错误堆栈如下所示:

140508081342272:error:0D0680A8:asn1 encoding routines:asn1_check_tlen:wrong tag:crypto/asn1/tasn_dec.c:1149:
140508081342272:error:0D06C03A:asn1 encoding routines:asn1_d2i_ex_primitive:nested asn1 error:crypto/asn1/tasn_dec.c:713:
140508081342272:error:0D08303A:asn1 encoding routines:asn1_template_noexp_d2i:nested asn1 error:crypto/asn1/tasn_dec.c:646:Field=serialNumber, Type=X509_CINF
140508081342272:error:0D08303A:asn1 encoding routines:asn1_template_noexp_d2i:nested asn1 error:crypto/asn1/tasn_dec.c:646:Field=cert_info, Type=X509

我是这样称呼的d2i_X509

X509 *key_struct = d2i_X509(NULL, byte_data, byte_data_length);
if(key_struct == NULL) {
    ERR_print_errors_fp(stderr);
}

OpenSSL 返回此内容:

openssl asn1parse -inform DER < out.bin
    0:d=0  hl=3 l= 159 cons: SEQUENCE          
    3:d=1  hl=2 l=  13 cons: SEQUENCE          
    5:d=2  hl=2 l=   9 prim: OBJECT            :rsaEncryption
   16:d=2  hl=2 l=   0 prim: NULL              
   18:d=1  hl=3 l= 141 prim: BIT STRING

答案1

您那里没有 X.509 结构(证书),它SubjectPublicKeyInfo只是在 X.509 RFC 中定义的,看起来像是 RSA 公钥。我建议使用另一个openssl用于解析此结构的函数,d2i_PUBKEY()如下所示:https://www.openssl.org/docs/man1.1.0/man3/i2d_PUBKEY_bio.html

相关内容