- 有两对公私钥,一把是CA机构的公钥和私钥,一把是服务器的公钥和私钥。
- 数字签名由数字证书的明文内容组成然后通过CA机构私钥进行加密后的密文(只有CA机构的公钥可以打开)。
- 步骤2“内置公钥”的存在就是为了防止公钥在网络之中传输容易泄露的问题,浏览器或者操作系统在安装时默认就会植入一些世界公认的可信任CA机构的证书(可以理解里面包含公钥)或者是用户自主导入的根证书(比如支付宝等金融机构会提示用户安装根证书的原因)。
- 较为关键的步骤是数字签名验证阶段,再拿到服务器给到的数字证书后,用内置的CA证书的公钥去解密数字签名,解密后拿到证书的明文内容,然后和服务器发送的数字证书的明文内容做比较(数字签名=证书上的明文内容被私有加密后),如果发现不匹配,那证明证书可能被篡改过,则就会拒绝链接。
- 当然验证阶段还有一些细节的验证操作,比如:服务器返回的证书浏览器是否信任,如果不信任,交给用户去选择是否继续。明文验证等等。最关键的验证还是数字签名验证阶段
- 客户端根据服务器的算法生成一组随机数(当做对称加密的密钥),然后用之前拿到的数字证书上(服务器返回的)的公钥进行加密。
- 用私钥解密就拿到了与客户端之间沟通的密钥(对称加密),之后的请求报文和响应报文都采用这个密钥进行加密
服务端(本地有CA根证书公钥,验证ca证书机构明文,没问题,根据ca机构算法+内容+随机值生成加密内容) <=> ca机构(验证加密内容,解密查看ca机构明文,安全,重新ca机构算法+内容+随机值加密传输给客户端) <=> 客户端(本地有CA根证书公钥,验证ca机构证书明文,没问题的话,读取服务端传输内容)
https传输流程
最新推荐文章于 2023-08-25 14:58:15 发布