我使用BP加密工具创建自签名证书现在我想手动验证其签名而不使用openssl。 任何人都可以给我一个自签名证书的例子,以及如何计算证书的签名?
答案 0 :(得分:0)
我假设你在谈论X.509证书,而不是一些CV证书。
根据RFC 5280 Internet X.509公钥基础结构证书和证书吊销列表(CRL)配置文件:
4.1. Basic Certificate Fields
X.509 v3证书的基本语法如下。签名 计算时,使用ASN.1对要签名的数据进行编码 区分编码规则(DER)[X.690]。 ASN.1 DER编码是一个 标签,长度,每个元素的值编码系统。
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 } ... SubjectPublicKeyInfo ::= SEQUENCE { algorithm AlgorithmIdentifier, subjectPublicKey BIT STRING }
关于你的任务:
我想手动验证其签名
您所要做的就是使用ASN.1解析器获取证书的三个顶级元素(待签名证书部分tbsCertificate
,算法标识signatureAlgorithm
和签名字节signatureValue
)并检查签名值是否确实签署了tbsCertificate。
由于您的证书是自签名的,因此您必须检查subjectPublicKey
内的tbsCertificate
。