HTTPS
一、加密
- HTTPS的通信过程中只在握手阶段使用了非对称加密,后面的通信过程 均使用的是对称加密,尽管非对称加密相比对称加密更加安全,但也存在两个明显的缺点:
- CPU的计算资源消耗非常大,一次完全TSL握手,密钥交换时的非对称解密计算量占整个握手过程的90%以上,而对称加密的计算量只相当于非对称加密的0.1%,如果应用层数据也使用非对称加解密,性能开销很大,无法承受;
- 非对称加密算法对加密的内容长度有限制,不能超过公钥长度,比如现在的常用的公钥长度是2048位,意味着待加密内容不能超过256个字节;
- 所以公钥加密目前只能用来做密钥交换或者内容签名,不适合用作应用层传输内容的加解密
- HTTPS如何保证安全
- 服务器可以先将非对称加密的公钥发给客户端,客户端就可以使用非对称加密的公钥加密对称加密的密钥了,然后将这个密钥发给服务器,此时服务器就持有对称加密的公钥,双方就可以通信了,所以非对称加密可以很好的管理对称加密的密钥,保证每次数据加密的密钥都不相同,这样的及时客户端病毒拉取到通信的缓存信息,也无法窃取到通信内容;
- 若是在通信过程中,在三次握手或者客户端发起HTTP请求的过程中,客户端被中间人劫持,那么中间人就很容易伪装,和客户端和服务器通信,所以就出现了数字证书,
- 服务器首先生成公私钥,把公钥提供给相关机构CA,CA将公钥放入数字证书并将数字证书颁布给服务器,此时服务器就可以将数字证书给客户端,数字证书中不仅仅只有公钥还加入了一些签名机制,保证数字证书一定是服务器发给客户端的;
- 综合以上三点:非对称加密算法(公钥和私钥)交换对称密钥+数字证书验证身份(也就是公钥是不是假的)+利用对称加密加解密后传输数据信息
二、TSL/SSL
2.1 TSL/SSL定义
- SSL(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL记录协议和SSL握手协议。
- TLS:(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成:TLS记录协议和TLS握手协议。
2.2 TSL/SSL运行过程
- 运行的过程:SSL/TSL协议采用的事公钥加密法(也就是使用的非对称加密,目前大部分使用的是RSA),客户端先向服务器索要公钥,然后使用公钥加密,服务器收到密文后采用私钥解密
- 索要到的公钥是采用的数字证书的方式,这个里面不仅仅包含了公钥而且加入了一些签名,保证了公钥的安全;而后面的每一次会话客户端和服务器都生成一个对话密钥来加密,此种方式是堆成加密大大减低了运算量;
- SSL/TLS协议的基本过程是这样的:
- 客户端向服务器端索要并验证公钥。
- 双方协商生成"对话密钥"。
- 双方采用"对话密钥"进行加密通信。
2.3 TSL/SSL区别
- 最新版本的TLS(Transport Layer Security,传输层安全协议)是IETF(Internet Engineering Task Force,Internet工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。在TLS与SSL3.0之间存在着显著的差别,主要是它们所支持的加密算法不同,所以TLS与SSL3.0不能互操作。
三、对称加密和非对称加密
3.1 对称加密
- 对称加密:加密和解密使用相同的密钥的算法,它要求发送方和接收方通信前商定一个对称密钥,对称算法的安全性完全依赖于密钥;
- 对称加密分为两种模式,流加密和分组加密
- 流加密:将消息作为字节流对待,并且使用数学函数分别作用在每一个字节位上。使用流加密时,每加密一次,相同的明文位会转换成不同的密文位。流加密使用了密钥流生成器,它生成的字节流与明文字节流进行异或,从而生成密文。
- 分组加密:是将消息划分为若干个分组,这些分组随后会通过数学函数进行处理,每次一个分组;比较常用的分组加密算法有DES、3DES、AES。其中DES是比较老的加密算法,现在已经被证明不安全。而3DES是一个过渡的加密算法,相当于在DES基础上进行三重运算来提高安全性,但其本质上还是和DES算法一致。而AES是DES算法的替代算法,是现在最安全的对称加密算法之一。
- DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合。
- 3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高。
- AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高;
- AES算法理解:AES 算法基于排列和置换运算。排列是对数据重新进行安排,置换是将一个数据单元替换为另一个。AES 使用几种不同的方法来执行排列和置换运算。AES 是一个迭代的、对称密钥分组的密码,它可以使用128、192 和 256 位密钥,并且用 128 位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换和替换输入数据
- 对称加密的优点:计算量小,加密速度快,加密效率高
- 对称加密的缺点:
- 交易双方都使用同样密钥,安全性得不到保障
- 每次使用对称加密算法时,都需要使用其他人不知道的唯一密钥,这使得双方所拥有的密钥数量呈几何级数增长,密钥管理成为负担;
3.2 非对称加密
- 非对称密钥交换算法本身非常复杂,密钥交换过程涉及到随机数生成,模指数运算,空白补齐,加密,签名等,一系列及其复杂的过程;
- 官方的定义:公开密钥加密(英语:public-key cryptography,又译为公开密钥加密),也称为非对称加密(asymmetric cryptography),一种密码学算法类型,在这种密码学方法中,需要一对密钥(其实这里密钥说法不好,就是“钥”),一个是私人密钥,另一个则是公开密钥。这两个密钥是数学相关,用某用户密钥加密后所得的信息,只能用该用户的解密密钥才能解密。如果知道了其中一个,并不能计算出另外一个。因此如果公开了一对密钥中的一个,并不会危害到另外一个的秘密性质。称公开的密钥为公钥;不公开的密钥为私钥。
- 常见的非对称加密算法:
- RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的;
- DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准);
- ECC(Elliptic Curves Cryptography):椭圆曲线密码编码学。
3.3 HASH算法
- Hash算法特别的地方在于它是一种单向算法,用户可以通过Hash算法对目标信息生成一段特定长度的唯一的Hash值,却不能通过这个Hash值重新获得目标信息。因此Hash算法常用在不可还原的密码存储、信息完整性校验等。
- 常见的Hash算法有MD2、MD4、MD5、HAVAL、SHA
四、HTTP与HTTPS的区别
- https需要到CA申请证书,一般免费证书很少都需要交费;
- http是超文本传输协议,信息是以明文传输,https是具有 安全性的ssl/tls加密的传输协议;
- http和https使用的是完全不同的连接方式,且默认的连接端口也是不一样的,http默认80,https默认443;
- http的连接很简单,是无状态的,https协议是由ssl+http协议构建的可进行加密传输,身份认证的网络协议,比http协议安全;