梳理HTTPS知识,如有错误请指正,参考文章如下:
腾讯云文档SSL原理:
https://www.qcloud.com/docume...
HTTPS:
http://www.360doc.com/content...
https://segmentfault.com/a/11...
SSL与TLS:
https://segmentfault.com/a/11...
http://kb.cnblogs.com/page/19...
RSA加密算法-维基百科:
https://zh.wikipedia.org/zh-c...
数字证书基本概念:
http://blog.csdn.net/adeyi/ar...
1 加解密基本概念
1.1 对称加密算法
加密、解密使用相同密钥。
encode :
decode :
1.2 非对称加密算法
加密、解密使用不同密钥,分为公钥、私钥。
1.3 公钥密码体制
公钥密码体制使用非对称加密算法,分三部分:加解密算法、公钥、私钥。
其中,算法、公钥公开,私钥保密,加解密过程如下:
encode :
decode :
1.4 RSA
RSA是一种公钥密码体制,算法、公钥公开,私钥保密。RSA的一对公钥、私钥都可以用来加密和解密,公钥加密的内容只能使用私钥解密,私钥加密的内容只能使用公钥解密。
1.5 哈希算法
将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。
1.6 签名
作用:保证通信过程中传递信息未被修改。
实现:计算信息的hash值,并与信息一起发送,为避免恶意同时篡改信息与hash值情况,对hash值加密,接收方收到数据后,计算信息的hash值,对比传输解密后的hash值,即可获知信息是否未被修改。(加密细节后文详述)
2 HTTP、TLS、HTTPS
2.1 HTTP
HTTP请求
黑客拦截
裸奔的HTTP信息容易被窃听甚至篡改。现在有2个问题:
1)如何确保客户端的通信对象是真正的服务器而非黑客
2)如何保证即使通信内容被黑客窃取也不会泄露真是内容
2.2 TLS
- HTTPS比HTTP多一层SSL/TLS
- SSL(Secure Socket Layer,安全套接字层)
- TLS(Transport Layer Security,传输层安全)
SSL版本:SSL1.0、SSL2.0、SSL3.0
TLS版本:TLS1.0、TLS1.1、TLS1.2。
TLS是IETF制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。两者差别极小,可以理解为SSL 3.1。SSL3.0和TLS1.0由于存在安全漏洞,已经很少被使用到。TLS 1.3 改动会比较大,目前还在草案阶段,目前使用最广泛的是TLS 1.1、TLS 1.2。
2.3 HTTPS
1)Client请求,发送客户端信息(如:支持的非对称/对称加密算法、压缩方式等)+随机码1
2)Server响应,发送确认信息(如:确认后续使用的非对称/对称加密算法、压缩方式等)+数字证书+随机码2
2)Client校验数字证书真实性,确认后获得服务器公钥
3)Client确认,发送确认信息+随机码3,随机码3公钥加密
3)Server收到后,Clinet和Server都有3个随机数,组合生成密钥
4)Server确认,握手结束,下一步开始使用协商的对称加密算法+密钥进行通信
5)对称加密算法+密钥,请求,序号1
6)对称加密算法+密钥,响应,序号2
...注意:
- 为保证通信传递信息未被修改,信息发送前计算hash值与信息一起发送,接收方收到后可重新计算hash值并与收到hash值对比,确保传递信息未被修改。
- 上步的计算信息hash值,有的文章中提到,为避免黑客同时修改内容与hash值,握手3)4)步应使用公钥&私钥加密对hash值加密,我理解这是不必要的,黑客目的是要获得随机码3并算出密钥,同时修改了内容与hash无法获取随机码3,并导致握手失败(Client与Server密钥对应不上),而且使用私钥加密并进行信息传递,本身存在被试探私钥加密规律的问题。
- 握手结束后,通信含有序号,目的是为了避免黑客截取某些信息后原封不动重发多次,扰乱通信,添加序号后一旦序号不对应,立即终止通信。(序号具体实现待补充修改)
2.4 数字证书
2个概念:
指纹:数字证书主体的hash值
签名:使用CA(证书管理机构)的私钥,加密后的指纹
Client 校验证书确认服务器身份过程:
操作系统安装时就已经自带权威CA机构的证书,这些证书里包含其CA公钥,用来解密数字证书的签名(被CA私钥加密)。
1)客户端收到服务器的数字证书A,查看A的Issuer证书发布机构,从操作系统中找到对应发布机构的CA证书,获取CA公钥
2)使用CA公钥解密证书签名,获得证书主体内容的hash1
3)重新计算证书主体内容得hash2,与hash1对比证明证书未被修改
4)从证书中获得服务器公钥,为HTTPS过程中加密协商做准备
步骤1~4确认数字证书本身真实性,确实为权威CA机构发布,而非伪造5)确认服务器证书真实性后,对比访问域名与数字证书Subject证书所有者是否一致等信息,确认访问服务器真实性。
步骤5确认访问网站的真实性
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。