目录
浏览网站时,我们会发现网址有两种‘格式’,一种以 http:// 开头,一种以 https:// 开头。好像这两种‘格式’差别不大,只多一个 s,实际上它们有天壤之别。
HTTP 与 HTTPS 主要区别如下
传输信息安全性不同
-
http 协议:HTTP 协议运行在 TCP 之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。
-
https 协议:HTTP 运行在 SSL/TLS 之上,SSL/TLS 运行在 TCP 之上,所有传输的内容都经过加密, 加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。客户端可以验证服务器端的身份,如果配置了客户端验证,服务器方也可以验证客户端的身份。
响应速度
- 理论上,http 响应速度更快,因为 http 只需三次握手,也就是 3 个包即可建立连接
- https 除了三次握手,还需要进行 ssl 握手,一共需要 12 个包
连接方式不同
-
http 协议:http 的连接很简单,是无状态的。
-
https 协议:是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议。
端口不同
-
http 协议:默认端口80
-
https 协议:默认端口443
展示方式
- 由于 http 是一种没有加密的协议,各大浏览器厂商开始支持 https 站点,例如 http 站点,会被谷歌浏览器标记为 “不安全”等等
- https 站点,则会被各大浏览器加上"绿色安全锁"标记,如果网站配置增强级 SSL 证书,地址栏还会变为“绿色地址栏”
证书申请方式不同
- http 协议:免费申请
- https 协议:需要到第三⽅颁发证书(CA)申请证书,一般免费证书很少,需要交费
https 做了什么保证它是安全的?
在HTTPS数据传输过程中对数据进行加密处理,HTTPS是使用对称加密和非对称加密、签名算法(签名算法不是用来做加密的)以及证书机制来对消息进行处理,以此达到一个安全的有效传输。
-
对称加密
通信的双⽅都使⽤同⼀个秘钥进⾏加解密,⽐如特务接头的暗号,就属于对称加密。
对称加密虽然很简单性能也好,但是⽆法解决⾸次把秘钥发给对⽅的问题,很容易被⿊客拦截秘钥。
-
⾮对称加密
私钥 + 公钥 = 密钥对。⽤私钥加密的数据,只有对应的公钥才能解密,⽤公钥加密的数据,只有对应的私钥才能解密。公钥和私钥是相对而言的,通常而言,保留在己方不对外泄露称之为私钥,可公布公开的称之为公钥。
因为通信双⽅的⼿⾥都有⼀套⾃⼰的密钥对,通信之前双⽅会先把⾃⼰的公钥都先发给对⽅,然后对⽅再拿着这个公钥来加密数据响应给对⽅,等到到了对⽅那⾥,对⽅再⽤⾃⼰的私钥进⾏解密。
⾮对称加密虽然安全性更⾼,但是带来的问题就是速度很慢,影响性能。
怎么提升非对称加密速度?
结合两种加密⽅式,将对称加密的密钥使⽤⾮对称加密的公钥进⾏加密,然后发送出去,接收⽅使⽤私钥进⾏解密,得到对称加密的密钥,然后双⽅可以使⽤对称加密来进⾏沟通。
此时⼜带来⼀个问题,中间⼈问题:
如果此时在客户端和服务器之间存在⼀个中间⼈,这个中间⼈只需要把原本双⽅通信互发的公钥,换成⾃⼰的公钥,这样中间⼈就可以轻松解密通信双⽅所发送的所有数据。
所以这个时候需要⼀个安全的第三⽅颁发证书(CA),证明身份,防⽌被中间⼈攻击。
证书中包括:
签发者、证书⽤途、使⽤者公钥、使⽤者私钥、使⽤者的 HASH 算法、证书到期时间等
但是问题来了,如果中间⼈篡改了证书,那么身份证明是不是就⽆效了?这个证明就⽩买了,这个时候需要⼀个新的技术,数字签名。
如何防止数字证书被篡改
数字签名就是⽤ CA ⾃带的 HASH 算法对证书的内容进⾏ HASH 得到⼀个摘要,再⽤ CA 的私钥加密,最终组成数字签名。
当别⼈把他的证书发过来的时候,⽤同样的Hash算法,再次⽣成消息摘要,然后⽤ CA 的公钥对数字签名解密,得到 CA 创建的消息摘要,两者⼀⽐,就知道中间有没有被⼈篡改了。
这个时候就能最⼤程度保证通信的安全了。
https 会对传输数据的内容进行加密,也只能保证相对安全,而不能保证绝对安全。
这是因为,在建立通信时,会使用到 SSL 证书里的公钥,如果 SSL 证书的数字证书颁发机构不可信,反而会更容易导致数据被窃取。一些网站为了节省成本,可能会使用自签名的 SSL 证书,这种证书没有第三方监督和审核,也不受浏览器和操作系统的信任。