https 中如何保证证书是可信任的
Issue 欢迎在 Gtihub Issue 中回答此问题: Issue 254
Author 回答者: zxw94FE
数字签名
数字签名的原理其实很简单,就是把公钥私钥的用法反过来,之前是公钥加密、私钥解密,现在是私钥加密、公钥解密。但又因为非对称加密效率太低,所以私钥只加密原文的摘要,这样运算量就小的多,而且得到的数字签名也很小,方便保管和传输。
数字证书和CA
因为公钥是任何人都可以发布的,所以我们需要引入第三方来保证公钥的可信度,这个“第三方”就是我们常说的 CA(Certificate Authority,证书认证机构),CA 对公钥的签名认证也是有格式的,要包含公钥的序列号、用途、颁发者、有效时间等等,把这些打成一个包再签名,完整地证明公钥关联的各种信息,形成“数字证书”(Certificate)。小一点的 CA 可以让大 CA 签名认证,但链条的最后,也就是 Root CA,就只能自己证明自己了,这个就叫“自签名证书”(Self-Signed Certificate)或者“根证书”(Root Certificate)。你必须相信,否则整个证书信任链就走不下去了。
Author 回答者: Echo-MakeGreatEffort
证书的可信性是通过证书链、数字签名和浏览器中预装的可信根证书来保证的。操作系统和浏览器依赖信任的 CA 对证书进行验证,确保证书是合法且未被篡改
- 证书颁发机构(CA):证书由一个被广泛信任的第三方组织签发,这些组织被称为证书颁发机构(Certificate Authority, CA)。
- 证书链(信任链):服务器向客户端提供的证书通常并非直接由根证书签发,而是由中间证书签发。根证书—中间证书—服务器证书共同构成了证书链;验证过程中,浏览器会检查服务器证书的签发者是谁,并递归地验证直到找到预先安装的根证书。如果整个证书链都有效并且可以追溯到一个可信的根证书,证书就是可信的
- 浏览器内置的根证书:主流的操作系统和浏览器都预装了一组可信任的根证书,这些根证书代表了被信任的 CA
- 证书的数字签名:CA 使用自己的私钥对证书进行数字签名。浏览器使用相应的 CA 公钥来验证证书的签名是否有效