详解Https是如何确保安全的

什么是HttpsHTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版 。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL
Https的作用

  • 内容加密 建立一个信息安全通道,来保证数据传输的安全;
  • 身份认证 确认网站的真实性
  • 数据完整性 防止内容被第三方冒充或者篡改
Https的劣势
  • 对数据进行加解密决定了它比http慢
需要进行非对称的加解密,且需要三次握手 。首次连接比较慢点,当然现在也有很多的优化 。
出于安全考虑,浏览器不会在本地保存HTTPS缓存 。实际上,只要在HTTP头中使用特定命令,HTTPS是可以缓存的 。Firefox默认只在内存中缓存HTTPS 。但是,只要头命令中有Cache-Control: Public,缓存就会被写到硬盘上 。IE只要http头允许就可以缓存https内容,缓存策略与是否使用HTTPS协议无关 。
HTTPS和HTTP的区别
  • https协议需要到CA申请证书 。
  • http是超文本传输协议,信息是明文传输;https 则是具有安全性的ssl加密传输协议 。
  • http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443 。
  • http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全 。
http默认使用80端口,https默认使用443端口
下面就是https的整个架构,现在的https基本都使用TLS了,因为更加安全,所以下图中的SSL应该换为SSL/TLS 。
详解Https是如何确保安全的

文章插图
 
下面就上图中的知识点进行一个大概的介绍 。
加解密相关知识对称加密
对称加密(也叫私钥加密)指加密和解密使用相同密钥的加密算法 。有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来 。而在大多数的对称算法中,加密密钥和解密密钥是相同的,所以也称这种加密算法为秘密密钥算法或单密钥算法 。
常见的对称加密有:DES(Data Encryption Standard)、AES(Advanced Encryption Standard)、RC4、IDEA
非对称加密
与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey);并且加密密钥和解密密钥是成对出现的 。非对称加密算法在加密和解密过程使用了不同的密钥,非对称加密也称为公钥加密,在密钥对中,其中一个密钥是对外公开的,所有人都可以获取到,称为公钥,其中一个密钥是不公开的称为私钥 。
非对称加密算法对加密内容的长度有限制,不能超过公钥长度 。比如现在常用的公钥长度是 2048 位,意味着待加密内容不能超过 256 个字节 。
摘要算法
数字摘要是采用单项Hash函数将需要加密的明文“摘要”成一串固定长度(128位)的密文,这一串密文又称为数字指纹,它有固定的长度,而且不同的明文摘要成密文,其结果总是不同的,而同样的明文其摘要必定一致 。“数字摘要“是https能确保数据完整性和防篡改的根本原因 。
数字签名
数字签名技术就是对“非对称密钥加解密”和“数字摘要“两项技术的应用,它将摘要信息用发送者的私钥加密,与原文一起传送给接收者 。接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与解密的摘要信息对比 。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性 。
数字签名的过程如下:
明文 --> hash运算 --> 摘要 --> 私钥加密 --> 数字签名
数字签名有两种功效:
一、能确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名 。
二、数字签名能确定消息的完整性 。
注意:
数字签名只能验证数据的完整性,数据本身是否加密不属于数字签名的控制范围
数字证书
为什么要有数字证书?
对于请求方来说,它怎么能确定它所得到的公钥一定是从目标主机那里发布的,而且没有被篡改过呢?亦或者请求的目标主机本本身就从事窃取用户信息的不正当行为呢?这时候,我们需要有一个权威的值得信赖的第三方机构(一般是由政府审核并授权的机构)来统一对外发放主机机构的公钥,只要请求方这种机构获取公钥,就避免了上述问题的发生 。


推荐阅读