https说明
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
对称加密 秘钥只有1个 客户端和服务端都保存一个同样的秘钥 非对称加密 秘钥有2个 1个是公钥 1个是私钥 公钥是由私钥生成出来的 公私钥是一对 公钥可以公开给客户端 服务端保存私钥不能公开 公钥加密后的密文只能用私钥解密 私钥加密后的密文能用公钥解密(私钥也能解密私钥加密的数据) 非对称加密缺点 服务器的公钥是通过网络下发给客户端的 网络中间商可以进行以下操作 1.通过服务器的公钥解密服务器发送给客户端的响应数据(不能解密客户端公钥加密后发往服务端的数据) 2.拦截服务端下发给客户端的公钥然后自己伪造一对公私钥并把自己的公钥发送给客户端 这样就完全控制了客户端和服务端之间的网络通信 3.客户端没法验证公钥是不是由真正的服务器生成的 但是可以自己生成一对假的公私钥然后把假的公钥发给客户端来欺骗客户端并截断 客户端和真实服务端之间的加密通信 浏览器无法判断自己收到的公钥是不是由真正的服务器下发的 所以使用非对称加密通信还需要验证产生公私钥主体的真实性 因为任何设备都能产生自己的公私钥对 hash算法叫摘要算法 md5 sha256 sha125 数字签名 相同的数据传递进去一定会得到同样的结果 hash算法(公钥) = 公钥的签名(公钥的摘要) 两者之间必须有一个不用通过网络传递的东西 证书 第三方私钥加密(Server.公钥) = 密文 hash(Server.公钥) = 签名 签名算法 = sha256 密文 + 签名 + 签名算法 = 证书 第三方的私钥是不可能存在服务器上的,是保存在CA的服务器上.申请证书的时候CA只能返回一个证书 服务端不再下发自己的公钥 而是直接把证书下发给客户端 客户端使用第三方公钥.解密(证书) = Server.公钥 + 签名 + 签名算法 CA机构 CA的公钥 客户端本地自带CA的公钥(已经内置在操作系统中就是可信任的根证书),无需通过网络进行传输 私钥 server.key 公钥(待签名证书) server.csr 证书 server.crt 包含公钥+证书 server.pem 免费(签名)生成证书网址 www.freessl.cn 免费添加dns记录网址 www.juming.com TLS握手流程 TLS握手流程是建立在TCP三次握手之后才开始的 1.Client发起连接请求 2.Server返回证书server.crt(server.pem) 3.Client验证证书确定服务器的身份 4.Client生成对称密钥,用Server证书中的公钥加密发送给Server 5.Server用自己的私钥解密,得到Client发来的对称密钥 6.Server和Client便可以使用对称密钥相互发送加密数据View Code
https和http对比
客户端和服务端之间都是通过对称加密的方式进行通信
对称密钥不是由客户端发送给服务端的,两端的对称密钥都是在各自本地生成的,只不过客户端和服务端生成密钥的时候采用的是协商好的相同的加密算法和相同的随机字符串做为参数,这样两端生成的密钥字符串就是一样的
TLS握手过程
1.客户端和服务端先进行TCP的三次握手连接
2.在TCP的三次握手之后再进行TLS的握手连接
TLS1.3优化了建立连接的往返次数
标签:分析,加密,公钥,私钥,证书,https,原理,服务端,客户端 From: https://www.cnblogs.com/yxh168/p/17088511.html