http、https、websocket(二)

https

https 概念

超文本传输安全协议(英语:Hypertext Transfer Protocol Secure,缩写:HTTPS,常称为HTTP over TLS,HTTP over SSL或HTTP Secure)是一种经过计算机网络进行安全通讯的传输协议。HTTPS经由HTTP进行通讯,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的安全与完整性。这个协议由网景公司(Netscape)在1994年首次提出,随后扩展到互联网上。历史上,HTTPS链接常常用于万维网上的交易支付和企业信息系统中重要信息的传输。在2000年代晚期和2010年代早期,HTTPS开始普遍使用于保护全部类型网站上的网页真实性,保护帐户和保持用户通讯,身份和网络浏览的私密性。算法

http 与 https 区别

http 缺点

  • 通讯使用明文(不加密),内容可能会被盗用
  • 不验证通讯方的身份,所以有可能遭遇假装
  • 没法证实报文的完整性,因此有可能已遭篡改

https 结构

http 与 https 区别

HTTP + 加密 + 认证 + 完整性保护 = HTTPS

加密

和http相比,https只多了一层保障数据安全的TLS/SSL,TLS/SSL全称安全传输层协议Transport Layer Security, 是介于TCP和HTTP之间的一层安全协议,不影响原有的TCP协议和HTTP协议,因此使用HTTPS基本上不须要对HTTP页面进行太多的改造。浏览器

对称加密

对称就是指加密和解密时使用的密钥都是同一个,是“对称”的,对称加密看上去好像完美地实现了机密性,但其中有一个很大的问题:如何把密钥安全地传递给对方,术语叫“密钥交换”。由于在对称加密算法中只要持有密钥就能够解密。若是你和网站约定的密钥在传递途中被他人窃取,那以后就能随意解密收发的数据,通讯过程也就没有机密性可言了。安全

非对称加密

非对称加密(也叫公钥加密算法),它有两个密钥,一个叫“公钥”(public key),一个叫“私钥”(private key)两个密钥是不一样的,“不对称”,公钥能够公开给任何人使用,而私钥必须严格保密。公钥和私钥有个特别的“单向”性,虽然均可以用来加密解密,但公钥加密后只能用私钥解密,反过来,私钥加密后也只能用公钥解密。非对称加密能够解决“密钥交换”的问题。网站秘密保管私钥,在网上任意分发公钥,你想要登陆网站只要用公钥加密就好了,密文只能由私钥持有者才能解密。而他人由于没有私钥,因此就没法知道密文。服务器

TLS/SSL工做原理

HTTPS协议的主要功能基本都依赖于TLS/SSL协议,TLS/SSL的功能实现主要依赖于三类基本算法:散列函数 Hash、对称加密和非对称加密,其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性。网络

TLS 与 SSL是同一个东西,1999 年更名:SSL 3 === TLS 1.0函数

认证

公钥加密方式仍是存在一些问题的。那就是没法证实公钥自己就是货真价实的公开密钥。好比,正准备和某台服务器 创建公开密钥加密方式下的通讯时,如何证实收到的公钥就是本来预想的那台服务器发行的公钥。或许在公钥传输途中,真正的公钥已经被攻击者替换掉了。post

为了解决上述问题,可使用由数字证书认证机构(CA,Certificate Authority)和其相关机关颁发的公开密钥证书。数字证书认证机构处于客户端与服务器双方均可信赖的第三方机构的立场上。网站

首先,服务器的运营人员向数字证书认证机构提出公开密钥的申请。数字书认证 机构在判明提出申请者的身份以后,会对已申请的公开密钥作数字签名,而后分配这个已签名的公开密钥,并将该公开密钥放入公钥证书后绑定在一块儿。服务器会将这份由数字证书认证机构颁发的公钥证书发送给客户端,以进行公开密钥加密方式通讯。公钥证书也可叫作数字证书或直接称为证书。加密

接到证书的客户端可以使用数字证书认证机构的公开密钥,对那张证书上的数字签名进行验证,一旦验证经过,客户端即可明确两件事:计算机网络

  • 认证服务器的公开密钥的是真实有效的数字证书认证机构。
  • 服务器的公开密钥是值得信赖的。此处认证机关的公开密钥必须安全地转交给客户端。使用通讯方式 时,如何安全转交是一件很困难的事,所以,多数浏览器开发商发布版本时,会事先在内部植入经常使用认证机关的公开密钥。

HTTPS 的安全通讯机制

https比http安全的地方就是多了个TLS握手过程,经过TLS握手得到加密密钥最后对数据进行加密后传输

TLS握手

TLS握手什么时候发生?:

  • 每当用户经过HTTPS导航到网站而且浏览器首先开始查询网站的原始服务器时,就会进行TLS握手。
  • 每当其余任何通讯使用HTTPS(包括API调用和HTTPS查询上的DNS)时,也会发生TLS握手。
  • 经过TCP握手打开TCP链接后,会发生TLS 握手。

具体流程描述:

  • 客户端hello:客户端经过向服务器发送“问候”消息来发起握手。该消息将包括客户端支持的TLS版本,支持的加密套件以及称为“客户端随机”的随机字节字符串。

  • 服务器hello:为回复客户端hello消息,服务器发送一条消息,其中包含服务器的SSL证书,服务器选择的加密套件和“服务器随机数”,即服务器生成的另外一个随机字节串。

  • 客户端发送公钥加密的预主密钥。

  • 服务器用本身的私钥解密加密的预主密钥。

    • 客户端finished:客户端发送“完成”消息,该消息已用会话密钥加密。
    • 服务器finished:服务器发送一条用会话密钥加密的“完成”消息。
  • 握手完成,后续经过主密钥加解密。

引用文章

juejin.im/post/5af557…

juejin.im/post/5e9b22…

juejin.im/post/5e76bd…

zhuanlan.zhihu.com/p/37738632

juejin.im/post/5e461f…

图解http

相关文章
相关标签/搜索