HTTPS 是什么?
- 是安全的超文本传输协议,基于HTTP开发,用于在客户端和服务器之间交流信息。
- HTTPS 应用了SSL(安全套接字层)作为HTTP应用层的子层 (HTTP OVER SSL/TSL),SSL运行在TCP/IP层之上、应用层之下,为应用程序提供加密数据的安全通道
- HTTPS使用端口443, HTTP使用端口80进行通信
- HTTPS是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议 ,HTTP是无状态的协议
- HTTPS 与 HTTP 的安全性相比安全性提升了就是因为安全通信通道的建立
对称加密 与 非对称加密
【对称加密】
- 对称加密简单的说就是双方都使用相同的key加密和解密。
- 前提是双方要通信了才能知道这个相同的 key
- 使用对称加密,客户端和服务端都需要保存大量的加密算法和对应的密钥,管理成本巨大且容易泄漏
【非对称加密】
非对称加密就是使用不同的keys进行加密和解密,keys通常分为公钥和私钥
非对称的含义相对于对称来说,就是你即使知道怎么加密的的方式,也不知道怎么解密,术语来讲的话,就是我们熟知的公钥和私钥,服务端将公钥发送给客户端,客户端使用公钥加密信息,服务端接受消息后使用私钥解密。
相比而言非对称加密相比对称加密的应用是比较广泛的,但是服务器端发送公钥时还需做一定的安全措施,确保这个公钥不会被别人篡改过,于是就需要公信的证明。
公信的证明
- 服务器把自己的公钥登录到 CA(certificate agent 代理证明机构)
- CA 会用自己的私钥给服务器的公钥加密生成签名并颁发证书(保护膜),证书中包- 含对公钥做的签名和服务端的公钥;
- 客户端拿到消息体后,会用浏览器内置的 CA 的公钥对用私钥做的签名进行验证,如果验证通过表示安全,否则表示不安全。
这个公信的过程是,服务器把公钥给到CA,CA用自己的私钥生成一个证书,证书包含这个服务器的公钥和对公钥做的签名,客户端拿到证书以后,利用浏览器内置的CA对这个证书验证,验证通过的话才进行通信,这样子安全信更加的高了
HTTPS 建立安全连接流程
- 客户端给出协议的版本号、一个客户端生成的随机数和客户端支持的加密算法;
- 服务端在客户端给出的加密算法列表中选出一种,并给出数字证书和一个服务端生成的额随机数;
- 客户端确认数字证书的有效性,然后生成一个新的随机数,并使用数字证书中的公钥加密这个随机数;
- 服务端使用私钥解密,获取客户端发来的随机数;
- 客户端和服务端根据约定的加密方法,使用之前的三个随机数,生成对话密钥,这个密钥会用来加密接下来的整个通信过程