im即时通讯开发:为什么要用HTTPS?浅析短连接的安全性
Posted wecloud1314
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了im即时通讯开发:为什么要用HTTPS?浅析短连接的安全性相关的知识,希望对你有一定的参考价值。
对于IM开发者来说,IM里最常用的通信技术就是Socket长连接和HTTP短连接(通常一个主流im会是这两种通信手段的结合)。从通信安全的角度来说,Socket长连接的安全性,就是基于SSL/TLS加密的TCP协议来实现的;而对于HTTP短连接的安全性,也就是HTTPS了。
到底什么是HTTPS?为什么要用HTTPS?今天就借此机会,跟大家一起深入学习一下HTTPS的相关知识,包括HTTP的发展历程、HTTP遇到的问题、对称与非对称加密算法、数字签名、第三方证书颁发机构等概念。
说到HTTPS,那就得回到HTTP协议。
对于HTTP协议,大家肯定都熟得不能再熟了。那么HTTPS和HTTP的区别大家了解吗?
对于这个经典的面试题,大部分人会这么回答:
1)HTTPS比HTTP多了一个S(Secure):也就是说HTTPS是安全版的HTTP;
2)端口号不同:HTTP使用80端口,HTTPS使用443端口;
3)加密算法:HTTPS用的是非对称加密算法。
上面的回答能给几分?等看完本文我们可以再回头来看下这个回答。
那么,HTTPS是如何实现安全的短连接数据传输呢?想彻底搞明白这个问题,还是要从HTTP的发展历程说起 ......
HTTP是Hypertext Transfer Protocal 的缩写,中文全称是超文本传输协议
通俗了解释就是:
1)超文本是指包含但不限于文本外的图片、音频、视频等多媒体资源;
2)协议是通信双方约定好的数据传输格式以及通信规则。
HTTP是TCP/IP协议簇的最高层——应用层协议:
浏览器和服务器在使用HTTP协议相互传递超文本数据时,将数据放入报文体内,同时填充首部(请求头或响应头)构成完整HTTP报文并交到下层传输层,之后每一层加上相应的首部(控制部分)便一层层的下发,最终由物理层将二进制数据以电信号的形式发送出去。
由HTTP的发展历程来看,最开始版本的HTTP(HTTP1.0)在每次建立TCP连接后只能发起一次HTTP请求,请求完毕就释放TCP连接。
我们都知道TCP连接的建立需要经过三次握手的过程,而每次发送HTTP请求都需要重新建立TCP连接,毫无疑问是很低效的。所以HTTP1.1改善了这一点,使用长连接的机制,也就是“一次TCP连接,N次HTTP请求”。
HTTP协议的长连接和短连接,实质上是 TCP 协议的长连接和短连接。
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。
PS:对于IM开发者来说,为了与Socket长连接通道区分,通常认为HTTP就是“短连接”(虽然这个“短连接”不一定真的“短”)。
随着HTTP越来越广泛的使用,HTTP的安全性问题也逐渐暴露。
回忆一下多年前遍地都是的运营商劫持,当你访问一个本来很正常的网页,但页面上却莫名其妙出现了一些广告标签、跳转脚本、欺骗性的红包按钮,甚至有时候本来要下载一个文件,最后下载下来却变成了另外一个完全不同的东西,这些都是被运营商劫持了HTTP明文数据的现象。
归纳一下就是:
1)数据保密性问题:因为HTTP无状态,而且又是明文传输,所有数据内容都在网络中裸奔,包用户括身份信息、支付账号与密码。这些敏感信息极易泄露造成安全隐患;
2)数据完整性问题:HTTP数据包在到达目的主机前会经过很多转发设备,每一个设备节点都可能会篡改或调包信息,无法验证数据的完整性;
3)身份校验问题:有可能遭受中间人攻击,我们无法验证通信的另一方就是我们的目标对象。
因此,为了保证数据传输的安全性,必须要对HTTP数据进行加密。
常见的加密方式分为三种:
1)对称加密;
2)非对称加密;
3)数字摘要。
前两种适合数据传输加密,而数字摘要不可逆的特性常被用于数字签名。
接下来,我们逐一简要学习一下这三种常见的加密方法。
对称加密也称为密钥加密或单向加密,就是使用同一套密钥来进行加密和解密。密钥可以理解为加密算法。
对称加密算法的优缺点和适用场景:
-
1)优点:算法公开、简单,加密解密容易,加密速度快,效率高;
-
2)缺点:相对来说不算特别安全,只有一把钥匙,密文如果被拦截,且密钥也被劫持,那么,信息很容易被破译;
-
3)适用场景:加解密速度快、效率高,因此适用于大量数据的加密场景。由于如何传输密钥是较为头痛的问题,因此适用于无需进行密钥交换的场景,如内部系统,事先就可以直接确定密钥。
非对称加密
非对称加密使用一对密钥(公钥和私钥)进行加密和解密。即时通讯开发
非对称加密可以在不直接传递密钥的情况下,完成解密,具体步骤如下:
1)乙方生成两把密钥(公钥和私钥)。公钥是公开的,任何人都可以获得,私钥则是保密的;
2)甲方获取乙方的公钥,然后用它对信息加密;
3)乙方得到加密后的信息,用私钥解密。
以最典型的非对称加密算法RSA为例,举个例子:
想要彻底搞懂RSA,需要了解数论的知识,全部推导过程RSA加密算法。简单介绍思路:使用两个超大质数以及其乘积作为生成公钥和私钥的材料,想要从公钥推算出私钥是非常困难的(需要对超大数因式分解为两个很大质数的乘积)。目前被破解的最长RSA密钥是768个二进制位。也就是说,长度超过768位的密钥,还无法破解(至少没人公开宣布)。因此可以认为,1024位的RSA密钥基本安全,2048位的密钥极其安全。
非对称加密算法的优缺点和适用场景:
1)优点:强度高、安全性强于对称加密算法、无需传递私钥导致没有密钥泄露风险;
2)缺点:计算量大、速度慢;
3)适用场景:适用于需要密钥交换的场景,如互联网应用,无法事先约定密钥。
实践应用过程中,其实可以与对称加密算法结合:
1)利用非对称加密算法安全性较好的特点来传递对称加密算法的密钥。
2)利用对称加密算法加解密速度快的特点,进行数据内容比较大的加密场景的加密(如HTTPS)。
以上是关于im即时通讯开发:为什么要用HTTPS?浅析短连接的安全性的主要内容,如果未能解决你的问题,请参考以下文章