HTTPS = SSL(Secure Socket Layer) / TLS(Transport Layer Security)协议 + HTTP协议
目前最新版本:HTTP2,TLS1.3,SSL3.0 巨头弃用 TLS 1.0/1.1 协议
Hypertext Transfer Protocol Secure (HTTPS) is an extension of the Hypertext Transfer Protocol (HTTP). It is used for secure communication over a computer network, and is widely used on the Internet. In HTTPS, the communication protocol is encrypted using Transport Layer Security (TLS) or, formerly, its predecessor, Secure Sockets Layer (SSL). The protocol is therefore also often referred to as HTTP over TLS, or HTTP over SSL. HTTPS (Hypertext Transfer Protocol Secure) 是基于 HTTP 的扩展,用于计算机网络的安全通信,已经在互联网得到广泛应用。在 HTTPS 中,原有的 HTTP 协议会得到 TLS (安全传输层协议) 或其前辈 SSL (安全套接层) 的加密。因此 HTTPS 也常指 HTTP over TLS 或 HTTP over SSL。 ---Wikipedia
1.加密方式
传输过程认证三阶段:数字证书签名认证(网站正确性验证&获取网站公钥) + 非对称加密(会话密钥传输) + 对称加密(数据报文加解密采用相同的会话密钥)
HTTPS在提高数据传输安全性的同时也需要使得数据传输效率不至于变得低效,非对称加密较为耗时,故报文传输采用对称加密,会话密钥传输采用非对称加密,网站证书采用明文传输。
2.如何保证传输过程中敏感信息的安全?
HTTP采用明文传输,故需要增加相应的加密机制并防止中间人攻击。
https由上图所示,客户端访问网站,建立连接第一步为服务端返回其数字证书,客户端通过CA公钥及证书签名和签名计算方法进行真实性校验。校验成功后客户端生成随机会话密钥并通过数字证书中服务端的公钥加密,传输给服务端。服务端收到加密的会话密钥后通过自己的私钥进行解密,获得与客户端相同的会话密钥,服务端通过会话密钥加密数据报文传输数据发送到客户端,客户端收到数据通过会话密钥进行解密。此后数据发送和接收即通过会话密钥的对称加密方式进行加解密。
3.中间人攻击
- 没有CA机构的情况下:
浏览器向网站服务器请求,服务器把公钥A明文传输给浏览器。 中间人劫持到公钥A并保存下来,把数据包中的公钥A替换成自己伪造的公钥B,浏览器随机生成一个用于对称加密的会话密钥,用公钥B加密后传给服务器。中间人劫持后用私钥B’解密得到会话密钥,再用公钥A加密后传给服务器。服务器拿到后用私钥A’解密得到会话密钥,开始与客户端进行报文传输,此时中间人拥有会话密钥,将造成信息泄漏。
- 第三方权威机构CA(Certification Authority)引入后即可防止上述中间人攻击。真实客户端需要确保服务端下发的公钥是真实的公钥,通过第三方可信机构的公钥验证数字证书签名即可确认服务端公钥的真实性。
4.数字证书申请:由第三方权威机构CA(Certification Authority)颁发给网站,权威机构会跟主流的浏览器或操作系统合作,将他们的公钥内置到浏览器或操作系统环境中
采用 HTTPS 协议的服务器必须有一套数字证书,证书需要申请,由专门的数字证书认证机构(CA)进行严格的审核之后颁发。颁发的证书保存在服务端,用于服务端与客户端建立通信时明文传给客户端,客户端再使用CA的公钥进行签名验证。服务端私钥需安全保存不可泄漏,服务端公钥则附带在证书的信息中公开。证书本身有附带证书电子签名,用来验证证书的完整性和真实性,用以防止证书被篡改。
服务器运营人员向第三方认证机构(CA)提交公钥、组织信息、域名等信息以申请数字证书
认证机构认证通过后颁发给网站的数字证书包含:申请者的组织信息和个人信息、证书持有者的公钥、证书颁发机构信息、证书有效期、证书序列号、证书电子签名、签名计算方法
注:证书电子签名用于验证证书的正确性,由证书信息结合一定的Hash函数生成并通过CA的私钥加密。证书接收方包括网站运营人员和访问此网站的客户端,获取证书取出签名文件并通过CA公钥、签名计算方法进行解密认证和证书正确性认证,确保证书没有被中间人篡改。
5.加密与签名
-
对称加密:加解密使用相同密钥
非对称加密:加解密使用不同密钥(公钥、私钥),一般使用使用公钥加密、私钥解密,私钥自己保存,公钥公开 -
第一种用法:公钥加密,私钥解密 ---用于加解密
既然是加密,那肯定是不希望别人知道我的消息,所以只有我才能解密,所以可得出公钥负责加密,私钥负责解密;
第二种用法:私钥签名,公钥验签。---用于签名
既然是签名,那肯定是不希望有人冒充我发消息,只有我才能发布这个签名,所以可得出私钥负责签名,公钥负责验证。 -
私钥和公钥是一对,谁都可以加解密,只是谁加密谁解密是看情景来用的:
第一种情景是签名,使用私钥加密,公钥解密,用于让所有公钥所有者验证私钥所有者的身份并且用来防止私钥所有者发布的内容被篡改,但是不能保证内容不被他人获得;
第二种情景是加密,用公钥加密,私钥解密,用于向公钥所有者发布信息,由于中间人没有解密的私钥故无法获取真实内容,但信息可能被他人篡改。 -
加密情景:
甲想给乙发一个安全保密的数据,那么甲乙应该各自有一个私钥,甲先用乙的公钥加密这段数据,再用自己的私钥给这段加密后的数据进行签名,最后再发给乙,这样确保了内容既不会被读取,也不会被篡改。
6.以登录为例:帐号密码等数据为敏感信息
- 通常网站会使用短信验证码、图片验证码、滑动验证、最错误次数、拒绝弱密码、异常操作或登录提醒等操作防止账号密码被穷举以及客户端进行MD5之后再传输,从而防止暴露密码明文;
- 推荐方案:把网站中所有的HTTP请求修改为强制使用HTTPS,同时客户端与服务端约定一套可靠的密码验证加解密方式,或者客户端使用加密算法加密密码数据使服务端进验证和存储时使用密文,客户端常用的算法时MD5,但目前一些公共的解密库已经包含了大量MD5解密数据,更好的应该是自己定义一套或者在MD5基础上做一些字符修改,同时网站请求客户端做好防反编译。
- 若仅使用HTTPS当请求接口被抓包工具获取,由于浏览器 or 操作系统已内置第三方认证机构公钥,仍然可以模拟客户端与服务端通信从而穷举密码,所以目前网站会采取各种上述手段。
7.其它
HTTP 1.1之后请求消息头默认启用Connection: Keep-Alive(中文翻译:持久连接 or 长连接),非KeepAlive模式时,每个请求客户端和服务端都需要新建一个连接,完成之后立即断开连接(HTTP协议为无连接的协议),如请求一个图片或html页面,服务端通常在发送回所请求的数据之后就关闭连接;当使用Keep-Alive模式时,客户端到服务端的连接持续有效,直到客户端请求消息头加入Connection: close 时才关闭连接。
HTTP为半双工通信方式:数据可以在一个信号载体(网路 / 网络)的两个方向上传输,但是不能同时传输。单工通信举例:卫星电视、广场广播;双工通信举例:手机电话。
2015年已推出HTTP 2.0,Akamai公司演示HTTP 1.1 和HTTP 2.0网络请求速度,由于HTTP 2.0采用了多路复用、Headers压缩等机制,使请求速度提升数倍
http_connection http2_multiplexingBy the way:工具推荐Charles
图片引用自其它文章
网友评论