【网络】证书

介绍

参考链接:

结构

{
    "tbsCertificate":{
        "version":2, // 版本,X509v3=2
        "serialNumber":"2cee193c188278ea3e437573", // 证书流水号,为长正整数。但可以使用hexstring表示。流水号在CA内唯一,即CA + serialNumber 构成一个全局唯一的id。最长不超过20字节
        "signature":{ // 与外部signatureAlgorithm具有相同的算法标识,但参数可以不同
        },
        "issuer":{ // 证书颁发者
            "rdnSequence":[ // DN = Distinguished Name
                {
                    "id":"...", // 3字节长度,标识后序的数据类型.每一个rdnSeqence结构:3字节id + '\r' + 1字节数据长度 + 数据可取:countryName,	stateOrProvinceName,localityName,organizationalUnitName=部门名称,organizationName=公司名,commonName=baidu
                     "data":... // 对应的数据      
                }
            ]
        },
        "validity":{
            "notBefore":... , // 起始时间
            "notAfter":..., // 结束时间
        },
        "subject":{ // 主体名称,和issuer结构相同
        },
        "subjectPublicKeyInfo":{,// 主体公钥信息
            "algorithm":"..", // 算法
            "subjectPublicKey":{
                "modulus":"..." // 模
                "publicExponent":..// 3字节的指数, 如65537
            }
        }
        "extensions":[{  // 扩展
               "extnId":"..", // id
               "critical":true, // 
               "value":"..." // 二进制数据
          },
          {
              "extnId":"id-ce-subjectAltName", // 2.5.29.17 Subject Alternative Name,包含:域名信息,IP信息等
              "value":["91.com","*.baidu.com"], // 域名信息
          }
          ] 
    },
    "signatureAlgorithm":"", // signatureValue签名的计算算法以及相关的参数(额外的参数根据ANS.1语法解析)
    "signatureValue": "..." // 根据tbsCertificate计算的签名,用于校验完整性。注意签名的对象是ANS.1编码后的对象,而不是原对象。注意,该签名后的值可能包含padding(头部为0),校验时需要把这些padding忽略。
}

Because the subject alternative name is considered to be definitively
bound to the public key, all parts of the subject alternative name
MUST be verified by the CA.

Subject Alternative Name与证书是绑定在一起的,因此CA在颁发证书时,必须验证这一点;同样,客户端必须根据Subject Alternative Name来校验证书是否合法。

签名规则

下面以一个TLS实例展示证书的签名规则。
在这里插入图片描述
如上图所示,签名部分(去掉ASN.1 DER编码的头部)由padding+encrypted组成,在解密签名时,首先要把padding部分去掉。
从Wireshark将signedCertificate导出为certificate_signed_certificate_body_der.bin文件,将签名的encrypted部分导出为certificate_signature_encrypted.bin文件
生成sha256的摘要:

openssl dgst -sha256 -binary -out certificate_sha256 certificate_signed_certificate_body_der.bin

使用下面的命令验证签名:

openssl rsautl -verify -inkey pubkey.pem -pubin -in certificate_signature_encrypted.bin -asn1parse

在这里插入图片描述

注意: 签名 = 加密的hash

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值