HTTPS简介
HTTPS(Hypertext Transfer Protocol Secure),即超文本传输安全协议, 它是一种以计算机网络安全通信为目的的传输协议.
它相对于HTTP来说,多了一个SSL(TLS)层,从而具有了保护数据安全以及完整性,并且提供了对网站服务器进行认证的功能,简单来说,它就是安全版的HTTP
SSL
SSL(Security Socket Layer,安全套接层)
- 为网络通信提供安全以及数据完整性的一种安全协议,位于应用层和会话层之间.
- 是操作系统对外的API,SSL3.0以后更名为TLS.
- 采用 身份验证和数据加密 保证网络通信的安全和数据完整性.
我们采用http传输的时候,不论是get还是post,数据都是 通过明文传输的,也就是相当于裸奔了哈哈哈哈.
加密的方式
非对称加密一般是服务器采用的,对称加密一般是客户端这边用的
HTTPS使用的加密方式是证书配合各种加密手段的综合加密方式,一般是对称加密+非对称机密+哈希算法这些辅助算法.
HTTPS数据传输流程
HTTPS在进行数据传输之前, 会与网站服务器和客户端浏览器进行握手,在握手时确定双方的加密密码信息,具体过程如下:
- 浏览器将支持的加密算法信息(比如只支持对称加密这样子)发送给服务器.
- 服务器根据浏览器提供的加密方式,在服务器支持的加密算法中,选择一套浏览器和服务器都支持的加密算法,
然后再选择一套哈希算法,然后将验证服务器身份的信息以证书的形式回发给浏览器,其中证书的信息包括:证书发布的机构CA(就好比四六级委员会才有资格发布四六级证书一样),证书的有效期,服务器非对称算法的公钥以及证书所有者,数字签名(就是验证服务器身份的信息经过哈希和CA的私钥加密生成的)等等. - 浏览器验证证书的合法性(
证书受到浏览器信任的话在浏览器地址栏会有标志显示,证书受信之后,浏览器会随机生成一串密码,并使用证书中的服务器的公钥加密),然后***生成一串随机数(作为对称加密的公钥)***并用证书中的服务器公钥加密,然后浏览器还会使用约定好的hash算法生成握手消息并用随机数密码加密,之后和随机数密码一起回发给服务器. - 服务器收到浏览器发送过来的数据后,使用私钥确定随机数密码,然后通过密码解密web浏览器发送过来的握手信息,并 验证哈希是否与浏览器发来的(浏览器会发送未加密的哈希和加密的哈希)一致,然后服务器会使用随机数密码加密新的握手信息回发给浏览器.
- 浏览器解密并计算握手消息的哈希值,如果与服务器发送过来的哈希值一致,则此握手过程结束后,服务器和浏览器会使用之前浏览器生成的随机数密码和公钥对数据进行加密交互数据.
这里浏览器和网站互相发送加密的握手消息并验证是为了保证双方都获得了一致的密码,并且可以正常解密加密数据,为后续真正数据的传输做一次测试
https数据传输流程总结
HTTP与HTTPS的区别
- HTTPS需要到CA机构申请证书,HTTP不需要.
- HTTPS是基于SSL协议的超文本传输协议,是密文传输,HTTP明文传输.
- 连接方式不同,而且HTTPS默认使用443端口,而HTTP默认使用80端口.
- HTTPS是HTTP协议+SSL协议(有状态)构建的可进行加密传输和身份认证的传输协议,较HTTP(无状态)更安全.
HTTPS真的安全吗?
不一定
由于我们在访问网站的时候,一般只会输入一个域名,例如www.baidu.com,不会输入http或者https,而浏览器默认填充是http://,然后网站管理员会将请求进行跳转为https,在此过程有被拦截的风险.
解决方法:可以使用HSTS(HTTP Strict Transport Security)即http严格安全传输协议优化,其作用是强制客户端(如浏览器)使用HTTPS与服务器创建连接。