如何解码 tbsCertificate 内容?

How can I decode tbsCertificate content?

我想看看 tbsCerticate 的内容是什么。

这是我所做的:

  1. 从网站 (baidu.com) 下载二进制格式的证书。
  2. 使用openssl x509 -in bd.cer -inform cer -text -noout >> bd.cer.noout.txt翻译成文字。现在我可以看到证书中的内容
  3. openssl asn1parse -inform der -in bd.cer > bd.cer.asn1 解析证书。根据rfc5280,第二行是tbsCertificate内容,即4:d=1 hl=4 l=2326 cons: SEQUENCE.
  4. dd if=bd.cer of=bd.cer.tbsCertificate skip=4 bs=1 count=2330 转储字节。
  5. openssl x509 -in bd.cer.tbsCertificate -inform der -text -noout >> bd.cer.tbs.txt现在想把它bd.cer.tbsCertificate解析成x509格式看看,但是失败了
unable to load certificate
140421447947392:error:0D0680A8:asn1 encoding routines:asn1_check_tlen:wrong tag:../crypto/asn1/tasn_dec.c:1149:
140421447947392:error:0D07803A:asn1 encoding routines:asn1_item_embed_d2i:nested asn1 error:../crypto/asn1/tasn_dec.c:309:Type=X509_CINF
140421447947392:error:0D08303A:asn1 encoding routines:asn1_template_noexp_d2i:nested asn1 error:../crypto/asn1/tasn_dec.c:646:Field=cert_info, Type=X509

我想知道为什么我不能像 bd.cer 一样将 bd.cer.tbsCertificate 翻译成 x509。我想念什么吗?从报错来看,好像是结构不对。

想看txt中的tbsCertificate,知道到底加密了什么,怎么办?感谢您的帮助!

From the error, it seems that the structure is not right.

正确。 x509 命令只能读取证书。

Certificate  ::=  SEQUENCE  {
    tbsCertificate       TBSCertificate,
    signatureAlgorithm   AlgorithmIdentifier,
    signatureValue       BIT STRING  }

TBSCertificate  ::=  SEQUENCE  {
    version         [0]  EXPLICIT Version DEFAULT v1,
    serialNumber         CertificateSerialNumber,
    signature            AlgorithmIdentifier,
    issuer               Name,
    validity             Validity,
    subject              Name,
    subjectPublicKeyInfo SubjectPublicKeyInfo,
    issuerUniqueID  [1]  IMPLICIT UniqueIdentifier OPTIONAL,
                         -- If present, version MUST be v2 or v3
    subjectUniqueID [2]  IMPLICIT UniqueIdentifier OPTIONAL,
                         -- If present, version MUST be v2 or v3
    extensions      [3]  EXPLICIT Extensions OPTIONAL
                         -- If present, version MUST be v3
    }

由于您提供的是 TBSCertificate,而不是证书,当它期望看到 SEQUENCE,SEQUENCE,但得到的是 SEQUENCE,[0],它出错了。

ASN.1 DER 编码中没有任何内容表示“此结构是一个 TBSCertificate”,该结构只是对应写入或读取的数据顺序的定义。所以 openssl x509 命令没有任何迹象表明您已经剥离了外部序列(证书结构)。 openssl asn1parse 显示数据包含的内容。 “我是一个序列,我的内容这么长。我是一个序列,我的内容这么长。我是一个特定于上下文的 0,我的内容这么长,它是 0x02。...” =16=]

What should I do if I want to see tbsCertificate in txt to know what exactly are encrypted.

证书中没有任何内容被加密。

“TBSCertificate”是“待签名证书”。外部结构是{“所有内容”,“它是如何签名的”,“签名”}。证书上的 openssl x509 命令已经向您显示了 TBSCertificate 值中的内容...版本号、主题、有效性、颁发者等。