客户端(网络浏览器)如何使用 CA 证书上的 public 密钥来验证服务器证书上的数字签名?

How a client(web browser) use public key on CA certificate to authenticate digital signature on server certificate?

在研究https的工作原理时,https中的ssl握手,提出了以下几点,但没有得到完整的答案。 在https的流程中,客户端在收到服务器证书后如何使用服务器证书中的数字签名和CA证书的public密钥来验证其真实性。

谁能简单解释一下?

简而言之,非对称密码学的思想是,你可以用一把钥匙加密,用另一把钥匙解密。数字签名的思想是可以用私钥加密,用public密钥解密。

因此,当 CA 为服务器颁发证书时,它会对证书的某些字段进行编码(在 specification 中进行了描述):

   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
        }

DER 格式,然后使用 signatureAlgorithm 使用其私钥对其进行加密。当浏览器收到服务器证书时,它采用 DER 格式的相同字段,然后采用 CA public 密钥并使用 signatureAlgorithm.

解密证书的加密签名

如果匹配,则表示该证书确实由 CA 签发,可以信任。