哈希在数字证书中计算的数据?

时间:2015-12-09 08:32:16

标签: security digital-certificate

我使用BP加密工具创建自签名证书现在我想手动验证其签名而不使用openssl。 任何人都可以给我一个自签名证书的例子,以及如何计算证书的签名?

1 个答案:

答案 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