Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HTTPS —— HTTP与HTTPS对比 #7

Open
Heqingsong opened this issue Aug 15, 2019 · 0 comments
Open

HTTPS —— HTTP与HTTPS对比 #7

Heqingsong opened this issue Aug 15, 2019 · 0 comments

Comments

@Heqingsong
Copy link
Owner

HTTP的缺点

  • 通信使用明文,内容可能会被窃听
  • 不验证通信方的身份,因此有可能遭遇伪装
  • 无法证明报文的完整性,所以有可能已遭篡改

什么是HTTPS

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

HTTPS(Hypertext Transfer Protocol Secure)安全超文本传输协议,是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。HTTPS使用端口443,而不是像HTTP那样使用端口80来和TCP/IP进行通信。

HTTP HTTPS
应用(HTTP) 应用(HTTP)
---- SSL
TCP TCP
IP IP

常见加密方式

公开密钥加密

公开密钥加密也称为非对称密钥加密,该加密算法使用两个不同的密钥:加密密钥和解密密钥。前者公开,又称公开密钥,简称公钥。后者保密,又称私有密钥,简称私钥。这两个密钥是数学相关的,用某用户加密密钥加密后所得的信息只能用该用户的解密密钥才能解密。RSA算法是著名的公开密钥加密算法。

公钥加密的另一用途是身份验证:用私钥加密的信息,可以用公钥拷贝对其解密,接收者由此可知这条信息确实来自于拥有私钥的某人。公钥的形式就是数字证书。

什么是SSL

SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层:SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

SSL协议提供的服务主要有哪些

  1. 认证用户和服务器,确保数据发送到正确的客户机和服务器
  2. 加密数据以防止数据中途被窃取
  3. 维护数据的完整性,确保数据在传输过程中不被改变。

什么是TLS

安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性。该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。

TLS 记录协议

TLS记录协议位于TLS握手协议的下面,在可靠的传输协议(如TCP/IP)上面。TLS记录协议的一条记录包含长度字段描述字段内容字段。TLS记录协议处理数据的加密,即记录协议得到要发送的消息之后,将数据分成易于处理的数据分组,进行数据压缩处理(可选),计算数据分组的消息认证码MAC,加密数据然后发送数据;接收到的消息首先被解密,然后校验MAC值,解压缩,重组,最后传递给协议的高层客户。

记录协议有四种类型的客户:握手协议警告协议改变密码格式协议__和__应用数据协议。通常使用一个对称算法,算法的密钥由握手协议提供的值生成。

TLS 记录协议提供的连接安全性具有两个基本特性:

私有
对称加密用以数据加密(DES 、RC4 等)。对称加密所产生的密钥对每个连接都是唯一的,且此密钥基于另一个协议(如握手协议)协商。记录协议也可以不加密使用。

可靠
信息传输包括使用密钥的 MAC 进行信息完整性检查。安全哈希功能( SHA、MD5 等)用于 MAC 计算。记录协议在没有 MAC 的情况下也能操作,但一般只能用于这种模式,即有另一个协议正在使用记录协议传输协商安全参数。

TLS 记录协议用于封装各种高层协议。作为这种封装协议之一的握手协议允许服务器与客户机在应用程序协议传输和接收其第一个数据字节前彼此之间相互认证,协商加密算法和加密密钥。

TLS 握手协议

TLS握手协议处理对等用户的认证,在这一层使用了公共密钥和证书,并协商算法和加密实际数据传输的密钥,该过程在TLS记录协议之上进行。TLS握手协议是TLS协议中最复杂的部分,它定义了10种消息,客户端和服务器利用这10种消息相互认证,协商哈希函数和加密算法并相互提供产生加密密钥的机密数据。TLS记录协议会在加密算法中用到这些加密密钥,从而提供数据保密性和一致性保护。

TLS 握手协议提供的连接安全具有三个基本属性:

  1. 可以使用非对称的,或公共密钥的密码术来认证对等方的身份。该认证是可选的,但至少需要一个结点方。
  2. 共享加密密钥的协商是安全的。对偷窃者来说协商加密是难以获得的。此外经过认证过的连接不能获得加密,即使是进入连接中间的攻击者也不能。
  3. 协商是可靠的。没有经过通信方成员的检测,任何攻击者都不能修改通信协商。

SSL速度慢

SSL慢分两种。一种是通信慢,一种是由于大量消耗CPU及内存等资源导致的处理速度慢。

HTTPS存在的一些问题

为什么不一直使用HTTPS

与纯文本通信相比,加密通信会消耗更多的CPU和内存资源,如果每次通信都加密,会消耗相当多的资源,平摊到一台计算机上时,能够处理的请求数量必定减少。除此之外,想要节约购买证书的开销也是原因之一。要进行HTTP通信,证书是必不可少的。使用证书必须向认证机构(CA)购买。证书价格可能会根据不同的认证机构略有不同。所以那些购买证书并不合算的服务网站以及一些个人网站会选择HTTP的通信方式。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant