TLS 验证证书的过程

查看证书

从网站 www.bwangel.me 上下载证书,输出成 www_bwangel_me_cert.pem 文件

openssl s_client -connect www.bwangel.me:443 -servername www.bwangel.me </dev/null | openssl x509 -outform PEM > www_bwangel_me_cert.pem

x509 证书中有以下几个关键字段

  • Signature Algorithm: sha256WithRSAEncryption 证书数字签名的算法
  • Signature Value: 证书数字前面的值
  • Subject/CN: Common Name,证书的通用名称
  • Issuer/CN: 证书颁发机构的通用名称
  • Subject Public Key Info: 证书中包含的公钥
# 以下命令可以查看证书的信息
openssl x509 -in www_bwangel_me_cert.pem -text -noout

根证书是自签名的,Subject 和 Issuer 相同。

根证书是内置在电脑中的,ca-certificates 包提供了常用的根证书,/etc/ssl/cert.pem 中包含了系统内置的根证书。

# 这是根证书 Internet Security Research Group 的信息
ø> openssl x509 -in isrg.pem -text -noout
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            82:10:cf:b0:d2:40:e3:59:44:63:e0:bb:63:82:8b:00
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=US, O=Internet Security Research Group, CN=ISRG Root X1
        Validity
            Not Before: Jun  4 11:04:38 2015 GMT
            Not After : Jun  4 11:04:38 2035 GMT
        Subject: C=US, O=Internet Security Research Group, CN=ISRG Root X1
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (4096 bit)
                Modulus:
                    00:ad:e8:24:73:f4:14:37:f3:9b:9e:2b:57:28:1c:
                    ...
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Key Usage: critical
                Certificate Sign, CRL Sign
            X509v3 Basic Constraints: critical
                CA:TRUE
            X509v3 Subject Key Identifier:
                79:B4:59:E6:7B:B6:E5:E4:01:73:80:08:88:C8:1A:58:F6:E9:9B:6E
    Signature Algorithm: sha256WithRSAEncryption
    Signature Value:
        55:1f:58:a9:bc:b2:a8:50:d0:0c:b1:d8:1a:69:20:27:29:08:
        ...

证书验证的流程

  • 客户端请求服务器,服务器返回证书链上除了根证书的所有证书。以下命令可以查看证书链上所有证书
openssl s_client -connect www.bwangel.me:443 -showcerts
  • 客户端拿到证书后,根据 Issuer/CN 找颁发者证书,颁发者再往上找颁发者的证书,直至找到根证书。
  • 根据根证书的公钥验证下一级证书的数字签名是否正确
    • 根据公钥解密出数字签名中的 hash 值
    • 根据证书签名算法,计算 hash 值,比较计算的 hash 值和数字签名中解密出的 hash 值是否相同
  • 逐级向下验证证书链中的所有证书,直至验证目标网站的证书。
2024年09月18日 / 17:20