问题描述
我想看看 tbsCerticate 的内容是什么。
这就是我所做的:
- 从网站 (baidu.com) 下载二进制格式的证书。
- 使用
openssl x509 -in bd.cer -inform cer -text -noout >> bd.cer.noout.txt
翻译成文本。现在我可以看到证书中的内容 -
openssl asn1parse -inform der -in bd.cer > bd.cer.asn1
解析证书。根据 rfc5280,第二行是 tbsCertificate 内容,即4:d=1 hl=4 l=2326 cons: SEQUENCE
。 -
dd if=bd.cer of=bd.cer.tbsCertificate skip=4 bs=1 count=2330
转储字节。 -
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 值中的内容……版本号、主题、有效性、颁发者等。