转载:https://blog.csdn.net/qq_22771739/article/details/86479411
首先说说证书的签发过程:
-
服务方 S 向第三方机构CA提交公钥、组织信息、个人信息(域名)等信息并申请认证;
-
CA 通过线上、线下等多种手段验证申请者提供信息的真实性,如组织是否存在、企业是否合法,是否拥有域名的所有权等;
-
如信息审核通过,CA 会向申请者签发认证文件-证书。
证书包含以下信息:申请者公钥、申请者的组织信息和个人信息、签发机构 CA 的信息、有效时间、证书序列号等信息的明文,同时包含一个签名;
签名的产生算法:首先,使用散列函数计算公开的明文信息的信息摘要,然后,采用 CA 的私钥对信息摘要进行加密,密文即签名;
-
客户端 C 向服务器 S 发出请求时,S 返回证书文件;
-
客户端 C 读取证书中的相关的明文信息,采用相同的散列函数计算得到信息摘要,然后,利用对应 CA 的公钥解密签名数据,对比证书的信息摘要,如果一致,则可以确认证书的合法性,即公钥合法;
-
客户端然后验证证书相关的域名信息、有效时间等信息;
-
客户端会内置信任 CA 的证书信息(包含公钥),如果CA不被信任,则找不到对应 CA 的证书,证书也会被判定非法。
在这个过程注意几点:
- 申请证书不需要提供私钥,确保私钥永远只能服务器掌握;
- 证书的合法性仍然依赖于非对称加密算法,证书主要是增加了服务器信息以及签名;
- 内置 CA 对应的证书称为根证书,颁发者和使用者相同,自己为自己签名,即自签名证书;
- 证书=公钥+申请者与颁发者信息+签名;
浏览器CA认证流程
-
客户端向一个需要https访问的网站发起请求。
-
服务器将证书发送给客户端进行校验。证书里面包含了其公钥。这里要特别说一下客户端到底 如何来校验对方发过来的数字证书是否有效。
首先在本地电脑寻找是否有这个服务器证书上的ca机构的根证书。如果有继续下一步,如果没有弹出警告。
使用ca机构根证书的公钥对服务器证书的指纹和指纹算法进行解密。 得到指纹算法之后,拿着这个指纹算法对服务器证书的摘要进行计算得到指纹。
将计算出的指纹和从服务器证书中解密出的指纹对比看是否一样如果一样则通过认证。
-
校验成功之后,客户端会生成一个随机串然后使用服务器证书的公钥进行加密之后发送给服务器。
-
服务器通过使用自己的私钥解密得到这个随机值。
-
服务器从此开始使用这个随机值进行对称加密开始和客户端进行通信。
-
客户端拿到值用对称加密方式 使用随机值进行解密。
为什么不一直使用非对称进行加密,而是在类似握手之后开始使用对称加密算法进行https通信:
非对称加密的消耗和所需的计算以及时间远比对称加密消耗要大,所以在握手和认证之后,服务器和客户端就开始按照约定的随机串,对后续的数据传输进行加密。
特点:
非对称加密相比对称加密更加安全
非对称加密算法对加密内容的长度有限制
CA数字证书作用之一是公钥分发
数字签名的签发过程是私钥加密,公钥解密