HTTPS简介
HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer 或 Hypertext Transfer Protocol Secure,超文本传输安全协议),是以计算机网络安全通信为目的的传输协议。
在HTTP基础上加入了安全层(TSL 或 SSL),从而具有了保护数据交换隐私,以及完整性,还有提供对网址服务器身份认证的功能。 简单来说就是安全版的HTTP
SSL(Secure Sockets Layer 安全套接层)
为网络通信提供安全及数据完整性的一种安全协议
是操作系统对外的API,SSL3.0后更名为TLS
SSL位于TCP与各应用层之间
采用身份验证和数据加密保证网络通信的安全和数据的完整性
加密方式
对称加密:加密和解密都使用同一个**
加密效率比非对称加密高很多
非对称加密:加密使用的**和解密使用的**是不同的
加密使用的** 称为公钥,解密使用的**称为私钥。公钥和算法都是公开的,私钥是保密的,非对称加密算法性能比较低,但安全性超强,由于其加密特性,非对称加密算法能加密的数据长度也是有限的。
哈希算法:将任意长度的信息转换为固定长度的值,算法不可逆
常见哈希算法是MD5
数据签名:证明某个消息或者文件是某人发出/认同的
签名就是在信息的后面加上一段内容,这些内容是经过哈希后的值,可以证明信息没有被修改过。哈希值一般加密以后,也就是签名之后,再和信息一起发出,以保证这个哈希值不会被修改
在实际情况中,仅仅使用其中的加密方式并不能满足生产要求,要么非对称加密性能过低,要么对称**容易泄漏。因此HTTPS使用的是证书配合各种加密手段的方式打出一套相对安全的组合拳。
HTTPS数据传输流程
HTTPS在数据传输之前,会与网站服务器和WEB浏览器进行一次握手,在握手时确定双方的加密密码信息。
浏览器将支持的加密算法信息发送给服务器
比如本地仅支持AES对称加密,ECC非对称加密之类的,就告诉服务器,我就支持这类加密,你给我回发的时候尽量按照我的加密方式的来。
服务器选择一套浏览器支持的加密算法,以证书的形式回发浏览器
服务器就会依据浏览器提供的加密的方式,在自己所支持的加密方式里面,选出一套加密算法和哈希算犯,将验证身份的信息,以证书的形式发送给WEB浏览器。证书的信息里面包含着证书发布的CA机构,证书的有效期,公钥,证书所有者,签名等。
浏览器验证证书合法性,并结合证书公钥加密信息发送给服务器
当浏览器收到证书之后,首先需要验证证书的合法性,如果证书收到浏览器信息,则在浏览器地址栏会有标志显示,否则就会显示不受信任的标志。当证书受信之后,WEB浏览器会随机生成一串密码,并使用证书中的公钥加密。之后,就是使用约定好的哈希算法握手消息,并生成随机数对消息进行加密,再将之前生成的信息回发给服务器。
服务器使用私钥解密信息,验证哈希,加密响应消息回发浏览器
当网站接收到浏览器发送过来的数据后,会使用网上本身的私钥,将信息解密确定密码。然后通过密码解密WEB浏览器发送过来的握手信息,并验证哈希释放与外部浏览器一致,然后服务器会使用密码加密新的握手信息,发送给浏览器。
浏览器解密响应消息,并对消息进行验真,之后进行加密交互数据
客户端浏览器解密并计算j经过哈希算法加密的握手消息。如果与服务器发送过来的哈希值一致,则此握手过程结束后,服务器y与浏览器会使用之前浏览器生成的随机密码和对称加密算法进行加密,然后交换数据
HTTP和HTTPS的区别
HTTPS需要到CA申请证书,HTTP不需要
HTTPS密文传输,HTTP明文传输
HTTPS具有安全性的SSL加密传输协议的
连接方式不同,HTTPS默认使用443端口,HTTP使用80端口
HTTPS=HTTP+加密+认证+完整性保护,较HTTP安全
HTTP连接很简单,是无状态的。HTTPS协议是由SSL+HTTP构建的,可进行加密传输身份认证的网络协议,SSL是有状态的。
HTTPS真的很安全吗?
浏览器默认填充http://,请求需要进行跳转,有被劫持的风险。
由于用户习惯,通常准备访问某个网站时,在浏览器只会输入一个域名,比如只会输入www.baidu.com,不会在域名前面加上http或https,而是由浏览器自动填充。当前浏览器默认自动填充的是http。一般情况,网站管理员会采用301,302跳转方式。由http跳转到https。但是,这个过程会使用到http,再经过http转发到https。因此会狠容易发生劫持,受到第三方的攻击
可以使用HTTPS(HTTPS Strict Transport Security)优化