我正在尝试使用 OpenSSL 读取由 Google Play 生成的证书。该证书描述如下:
Google Play 生成的 Base64 编码 RSA 公钥采用二进制编码的 X.509 subjectPublicKeyInfo DER SEQUENCE 格式。
我使用以下命令从命令行使用 OpenSSL 将给定的 Base64 编码字符串解码为二进制文件:
openssl enc -base64 -d -A <<< THE_KEY_CONTENT > key.der
二进制文件看起来合理。它有 294 个字节,第一个字节0x30
我认为与 相匹配SEQUENCE
。
使用生成的二进制文件,我尝试运行以下命令:
openssl x509 -inform der -in key.der -out key.pem
但是我从 OpenSSL 收到以下错误:
unable to load certificate 140736245019656:error:0D0680A8:asn1
encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1199:140736245019656:error:0D06C03A:asn1
encoding routines:ASN1_D2I_EX_PRIMITIVE:nested asn1 error:tasn_dec.c:767:140736245019656:error:0D08303A:asn1
encoding routines:ASN1_TEMPLATE_NOEXP_D2I:nested
asn1 error:tasn_dec.c:699:Field=serialNumber, Type=X509_CINF 140736245019656:error:0D08303A:asn1
encoding routines:ASN1_TEMPLATE_NOEXP_D2I:nested asn1 error:tasn_dec.c:699:Field=cert_info, Type=X509
我是否缺少了某些东西来加载此证书?我假设 Google 不会给我坏证书!
答案1
问题是,我把描述解释为文件中包含完整的 X509 证书.der
,但事实上它是仅有的DER 编码的 RSA 公钥。
结果,正确的命令如下:
openssl rsa -inform der -in key.der -pubin