web-dev-qa-db-ja.com

OpenSSLで証明書をロードできません

Google Playで生成されたOpenSSLを使用して証明書を読み取ろうとしています。証明書は次のとおりです。

Google Playによって生成されるBase64でエンコードされたRSA公開鍵は、バイナリエンコードされたX.509 subjectPublicKeyInfo DER SEQUENCE形式です。

これを使用して、コマンドラインからOpenSSLを使用して、指定されたBase64エンコード文字列をバイナリにデコードしました。

openssl enc -base64 -d -A <<< THE_KEY_CONTENT > key.der

バイナリファイルは妥当なようです。 294バイトで、最初のバイトは0x30SEQUENCEと一致すると思います。

結果のバイナリファイルを使用して、次のコマンドを実行しようとします。

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が私に悪い証明書を与えないだろうと思います!

4
aardvarkk

問題は、実際にonlyであるにもかかわらず、.derファイル内にX509証明書全体が含まれていることを意味するように説明を解釈したことでした。 DERでエンコードされたRSA公開鍵。

その結果、発行する正しいコマンドは次のようになります。

openssl rsa -inform der -in key.der -pubin
4
aardvarkk