https–安全套接字的超文本传输协议,是在http协议的基础上怎增加了ssl安全传输协议,http协议也就是我们通常通常浏览网页时使用的一种协议,信息传输是明文规定的,并且链接时无状态的,端口是80.因此https在http上增加了ssl协议,加密了通信的安全性,可以用于用户登录注册,身份验证等.SSL目前的版本是3.0,被IETF(Internet Engineering Task Force)定义在RFC 6101中,之后IETF对SSL 3.0进行了升级,于是出现了TLS(Transport Layer Security) 1.0,定义在RFC 2246。实际上我们现在的HTTPS都是用的TLS协议,但是由于SSL出现的时间比较早,并且依旧被现在浏览器所支持,因此SSL依然是HTTPS的代名词,但无论是TLS还是SSL都是上个世纪的事情,SSL最后一个版本是3.0,今后TLS将会继承SSL优良血统继续为我们进行加密服务。目前TLS的版本是1.2,定义在RFC 5246中,暂时还没有被广泛的使用 ()
https的工作原理 可以分为以下八步来进行
- 客户端发起https请求到服务器,把支持自身的算法以及加密方式(cliper)发送给服务器
- 服务器收到请求之后,会把客户端传过来的cliper与支持自身的作对比,如果不支持则断开连接,反之就会从中选出一种加密算法以及哈希算法以证书的形式返回给客户端.这个证书包含网站地址,公钥 public_key ,证书的颁发机构,过期时间等等
- 客户端收到响应后 会走一下流程
3.1验证证书的合法性
这是对服务端的一种认证,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题,
3.2:生成随机数字
如果证书验证通过或者用户接受了不授权的证书,此时浏览器会生成一串随机数据,然后用公钥加密
3.3:hash握手信息
用第2步返回约定好的 Hash 算法对握手信息取 Hash 值,然后用随机数加密“握手消息+握手消息 Hash 值(签名)
在这里之所以要取握手消息的HASH值,主要是把握手消息做一个签名,用于验证握手消息在传输过程中没有被篡改过。 - 服务器拿到客户端传输的密文,用自己的私钥解密握手信息并取出随机密码,在用随机密码解密握手信息与hash值,与传过来的hash值进行对比确认
因为这串密钥只有客户端和服务端知道,所以即使中间请求被拦截也是没法解密数据的,以此保证了通信的安全