客户端(网络浏览器)如何使用 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 签发,可以信任。
在研究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 签发,可以信任。