如何解码 tbsCertificate 内容?

问题描述

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

这就是我所做的:

  1. 从网站 (baidu.com) 下载二进制格式的证书。
  2. 使用 openssl x509 -in bd.cer -inform cer -text -noout >> bd.cer.noout.txt 翻译成文本。现在我可以看到证书中的内容

    enter image description here

  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.tbsCertificate 一样将 bd.cer 翻译成 x509。我错过了什么吗?从报错来看,好像结构不对。

如果我想在txt中看到tbsCertificate来知道究竟加密了什么,我该怎么做。感谢您的帮助!

解决方法

从错误来看,好像结构不对。

正确。 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,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 命令没有任何暗示您已经剥离了外部 SEQUENCE(证书结构)。 openssl asn1parse 显示数据包含的内容。 “我是一个序列,我的内容这么长。我是一个序列,我的内容这么长。我是上下文特定的 0,我的内容这么长,它是 0x02。......”

如果我想在txt中看到tbsCertificate,我该怎么做才能知道到底加密了什么。

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...