1、申请认证(证书)
服务端 S向第三方权威机构CA申请证书,服务器 S先生成公钥和私钥对确认信息里面绑定我们当前使用哪个域名,以及申请者以及公钥生成请求文件.csr(csr是我们服务端 S向CA提交申请的文件)注意:提交信息里不包含私钥
2、审核信息
CA收到服务端 S发送的信息先去审核(CA 通过线上、线下等多种手段验证申请者提供信息的真实性)审核通过,CA 会向申请者签发认证文件-证书。
证书包含以下信息:申请者公钥、申请者的组织信息和个人信息、签发机构 CA 的信息、有效时间、证书序列号等信息的明文,同时包含一个签名
3、签发证书
签名证书里的 明文信息 通过哈希算法加密 ------->摘要1(注意:这个就是后面的摘要1)
CA机构会产生一对公钥和私钥,用私钥对信息(摘要1)加密,拿到了一个签名
<签名>和<明文信息>组成了 |证书| ,把这个证书发给服务器
4、返回证书
服务器 S把CA证书发送给客户端 C
5、验证证书
客户端会内置信任 CA 的证书信息(包含公钥),如果CA不被信任,则找不到对应 CA 的证书,证书也会被判定非法。
客户端 C 利用对应 CA 的公钥解密签名数据,拿到了摘要1
客户端 C 读取证书中的相关的明文信息,采用哈希算法加密得到信息摘要2
对比证书的信息摘要,如果一致,则可以确认证书的合法性,即公钥合法
然后提取出 公钥pub_server
通过这一步客户端认可了服务器,拿到了服务器的公钥
在这个过程注意几点:
申请证书不需要提供私钥,确保私钥永远只能服务器掌握;
证书的合法性仍然依赖于非对称加密算法,证书主要是增加了服务器信息以及签名;
内置 CA 对应的证书称为根证书,颁发者和使用者相同,自己为自己签名,即自签名证书;
证书=申请者与颁发者信息+签名;