海树

我心有猛虎 细嗅蔷薇香

Owen Lee's avatar Owen Lee

Android 网络编程——HTTP 与 HTTPS

前言

HTTP 协议是最常见的一种网络协议,它以明文方式进行数据传输,不提供任何的加密措施,如果攻击者拦截了传输报文,就可以直接读懂消息。所以在进行一些安全要求传输时,比如转账,发送密码等,HTTP 是不能满足的,这时候,HTTPS 就应运而生了。

HTTPS 的概念与作用

HTTPS 是超文本传输安全协议,为了数据传输的安全,HTTPS 在 HTTP 的基础上加入了 SSL 协议,SSL 依靠证书来验证服务器的身份,并为客户端与服务器之间的通信加密,简单来说就是安全版的 HTTP。

HTTPS 协议的作用主要有两点:

  1. 建立一个安全通道,来保证数据传输的安全;
  2. 确认网站的真实性。

与 HTTP 的区别

主要区别有:

1.HTTPS 协议需要到 CA 申请证书,一般免费证书较少,因而需要一定费用。

2.HTTP 和 HTTPS 用的端口不一样,前者是 80,后者是 443。

3.HTTP 的信息是明文传输的;HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。

HTTPS 的工作流程

首先放一张 HTTPS 的工作原理图:

img1

1. 客户端发起 HTTPS 请求

用户在浏览器中输入一个 HTTPS 网址,然后连接服务器的 443 端口。

2. 服务端配置证书

采用 HTTPS 协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面。

这套证书其实就是一对公钥和私钥,公钥可以发布在公共网络进行传输,私钥则不能公布,只有自己可以知道。公钥和私钥可以互相加解密,即一段明文用公钥加密后可以用私钥解密,反之亦可。公私钥的作用有加密解密,签名认证等。

3. 传送证书

服务器将证书发送给客户端,其实就是公钥,包含很多信息,比如证书的颁发机构、过期时间等。

4. 客户端解析证书

这部分工作是有客户端的 TLS 来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。

如果证书没有问题,那么就生成一个随机值,这个随机值是一个会话密钥,然后用证书对该随机值进行加密。

5. 传送会话密钥

客户端将加密后的随机值(会话密钥)传送给服务端,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个会话密钥来进行加密解密了。

6. 服务端解密会话密钥

服务端用私钥解密后,得到了客户端传过来的会话密钥,然后把传输的数据内容通过该值进行对称加密。

7. 传输加密后的数据

服务端将使用会话密钥加密后的数据发送给客户端,可以在客户端被还原。

8. 客户端解密数据

客户端用之前生成的会话密钥解密服务端传过来的数据,于是获取了解密后的内容。整个过程第三方即使监听到了数据,因为没有会话密钥,不能够解密出明文数据,也是束手无策。

HTTPS 用到的加密方法

在 HTTPS 中,对称加密和非对称加密都用到了。非对称加密可以在不安全的信道上传递秘密内容,但是由于通常使用的非对称加密方法相较于对称加密算法慢很多,因此在 HTTPS 中仅使用非对称加密算法交换对称密钥,交换密钥之后的通信内容均使用对称加密算法加密和解密,这样既可以保证密钥的安全也可以保证内容的加解密速度,这对于移动端设备来说至关重要。

HTTPS 协议的缺点

HTTPS 也存在一些不足之处,主要有以下几点:

1.SSL 证书需要钱,功能越强大的证书费用越高。

2.HTTPS 连接缓存不如 HTTP 高效,大流量网站如非必要也不会采用,流量成本太高。

3.HTTPS 协议握手阶段比较费时,对网站的相应速度有负面影响。

4.HTTPS 协议的加密范围比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。

5.最关键的,SSL 证书的信用链体系并不安全,特别是在某些国家可以控制 CA 根证书的情况下,中间人攻击一样可行。

补充

中间人攻击

在密码学和计算机安全领域中,中间人攻击(英语:Man-in-the-middle attack,缩写:MITM)是指攻击者与通讯的两端分别建立独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。

参考资料

浅谈 HTTPS

详细解析 HTTP 与 HTTPS 的区别