HTTPS的二三事

标签: 计算机基础 HTTPS | 发表时间:2017-02-21 11:21 | 作者:hrwhisper
出处:https://www.hrwhisper.me

前几篇博文都是有关HTTPS的东西,有人可能会问,什么是HTTPS?为什么要用HTTPS?

因此,本文主要来解答这些疑惑

Https的故事

  1. Alice和Bob是情人,他们每周都要写信。Alice 写好后,送到邮局,邮局通过若干个快递员到Bob,Bob回信过程类似。这是可以看成的简单的http的传输。
  2. 有一天,Alice觉得,要是写的信中途被人拆开了呢?毕竟一些小秘密不想让人知道啊。于是和Bob商定,采用加密的方法写。加密的方法比如使用古典密码的方案,如凯撒密码(A->E,B->F,即每个字母向右移动4个,(y + 4) mod 26)。这样加密了信的内容。
  3. 但是有一天,Alice收到Bob的信,信的内容经过解密后为分手之类的话。Alice跑去问Bob,Bob发现有人伪造了自己的信件,于是Alice和Bob商定,以后信上最后按上自己的指纹(就是数字证书),用来保证这封信别人伪造不了,此外,还用上校验码(数字签名),将信的内容经过hash,附带在信的末尾。在收信的一方收到后,首先查看是否有对方的指纹,并计算hash值和信的末尾所附带的是否一致,如果一致才进行解密查看。其实这样通信可以说从http到了https。

为什么需要HTTPS

通过上面的故事,现在可以来介绍一下https了。

https也叫做HTTP over TLS, HTTP over SSL, and HTTP Secure,Https 相比http来说,加密了传输过程和数据,能有效的保证了数据来源的可靠性、保密性以及数据的完整性。

  • 保密性从何说起呢?这个很好理解。再http中,数据使用明文传输,容易受到第三方的窃取和修改,用户的隐私也容易泄漏。而使用https后,对于传输过程和数据都进行了加密,使得数据难以被窃听,隐私也不容易被泄漏。
  • 数据的完整性呢?http中数据为明文,可能会被中间的劫持,然后修改。比较著名的有流量劫持,可以看知乎: 如何看待众多互联网公司联合声明:呼吁运营商严格打击流量劫持?。而https加密了内容,并且对传输的数据进行了校验,一旦被篡改,通信双方回立刻发现。
  • 此外,还有来源的可靠性。比如访问hrwhisper.me,你可能访问一台假的服务器,而该服务器提供和真正服务器不一样的内容。使用https,服务器提供了身份的证书,能防止身份被冒充。

Https的过程

1. 客户端问候Clinethello

客户端向浏览器发出加密通信的请求。
这个请求有如下信息:

  • 支持的加密通信协议版本、加密算法
  • 随机数(一个时间戳加上28字节的随机数),后面用于生成对话密钥。

2. 服务器问候SeverHello

服务器接收到客户端请求,发送问候,该问候包含以下信息:

  • 确认使用的加密通信协议版本和加密方法,比如TLS 1.2版本以及RSA公钥加密。(如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。)
  • 一个服务器生成的随机数,稍后用于生成”对话密钥”。
  • 服务器证书。

3. 客户端回应

客户端受到服务器问候后,首先会验证服务器证书是否真实有效。该证书需要和服务器的域名一致,且在有效期内,并且由可信机构CA颁布。若该证书无效,会向用户显示警告,由用户选择是否继续访问(典型的看12306)。如果证书没有问题,客户端向服务器发送下面的信息:

  • 随机数(pre-master secret),且该随机数用服务器公钥加密,防止被窃听
  • 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
  • 客户端握手结束信息。前面发送的所有内容的hash值,用来供服务器校验。

4. 服务器的最后回应

服务器收到客户端的pre-master secret后,结合之前的两个随机数,计算生成本次会话所用的“会话密钥”,然后向客户端发送下面信息:

  • 编码改变通知
  • 服务器握手结束信息。前面发送的所有内容的hash值,用来供客户端校验。

 

经历了四次握手后,客户端与服务器进入加密通信,其实之后就是普通的http协议,只不过用会话密钥加密加密内容。此外,一般而言,https连接只在第一次握手时使用非对称加密,通过握手交换对称加密密钥,在之后的通信走对称加密。因为一般而言,如RSA等非对称加密耗费的CPU资源较大。

 

Https的几个问题

会话密钥

会话密钥是怎么产生的呢?客户端和服务器在Hello都产生了一个随机数,结合pre-master secret一起生成了会话密钥(服务器和客户端由相同的三个随机数)。可以看如下图

为什么上面的需要3个随机数,而不是只用pre-master secret生成会话密钥?

因为每个主机并不是都能产生完全的随机数的。有很多产生的只是弱随机数而已,比如范围小,可能被猜测。如果该随机数被破解,那么之前一系列握手都是没什么用的。因此用三个随机数一起生成密钥能使得伪随机数更接近随机。

数字签名和数字证书

https中使用了数字签名和数字证书。
数字签名是私人的,用于加密摘要和报文。
数字证书是由CA中心派发的,用于证明身份。
详情可以看   数字签名是什么?

Https一定安全么

不一定。

比如使用弱密钥交换协议 Diffie-Hellman 。

此外,也和使用的安全传输协议有关,建议的是使用TLS1.0以上的版本(如TLS1.0, TLS1.1,TLS1.2,TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3。)而SSL2.0有严重的漏洞,SSL3.0也有 https://www.openssl.org/~bodo/ssl-poodle.pdf

如果你的站点采用了https,可以用可以用 https://www.ssllabs.com/ssltest/ 测试安全性。

HSTS协议

HSTS的作用是强制客户端(如浏览器)使用HTTPS与服务器创建连接。可在保证安全性的前提下,提高网站的响应速度。此外HSTS可以很大程度上解决SSL剥离攻击,因为只要浏览器曾经与服务器创建过一次安全连接,之后浏览器会强制使用HTTPS,即使链接被换成了HTTP。

 

小结

Https 为我们带来更安全的传输。Chrome 56中,将输入密码的非https网站标记为不安全。 Google 把https 作为网站排名的一个因素……

https需要数字证书,那么如何获取证书呢?过去证书需要购买,而现在我们应该感谢 Let’s Encrypt 项目,可以免费的签发个人的证书,这样能更好的推广https, 从而有一天真正实现Https as default。

关于Let’s Encrypt获取证书可以参考本博客  Let’s Encrypt! Centos 获取https证书攻略

参考资料

HTTPS的二三事,首发于 细语呢喃

相关 [https] 推荐:

https协议

- - 互联网 - ITeye博客
SSL 协议的握手过程   .       为了便于更好的认识和理解 SSL 协议,这里着重介绍 SSL 协议的握手协议. SSL 协议既用到了公钥加密技术(非对称加密)又用到了对称加密技术,SSL对传输内容的加密是采用的对称加密,然后对对称加密的密钥使用公钥进行非对称加密. 这样做的好处是,对称加密技术比公钥加密技术的速度快,可用来加密较大的传输内容,公钥加密技术相对较慢,提供了更好的身份认证技术,可用来加密对称加密过程使用的密钥.

Go和HTTPS

- - Tony Bai
近期在构思一个产品,考虑到安全性的原因,可能需要使用到 HTTPS协议以及双向数字证书校验. 之前只是粗浅接触过HTTP( 使用Golang开 发微信系列). 对HTTPS的了解则始于那次 自行搭建ngrok服务,在那个过程中照猫画虎地为服务端生成了一些私钥和证书,虽然结果是好 的:ngrok服务成功搭建起来了,但对HTTPS、数字证书等的基本原理并未求甚解.

Google https被屏蔽

- - 月光博客
  根据Google透明度报告 显示,从上周(5月27日)开始,Google的部分服务开始被屏蔽,其中最主要的是HTTPS搜索服务和Google登录服务,所有版本的Google都受到影响,包括Google.hk和Google.com等.   此次屏蔽的方法主要屏蔽Google部分IP地址的443端口,包括google.com.hk,accounts.google.com的部分IP的443端口被封,导致部分中国用户无法访问Google搜索和Gmail,由于Google的IP地址非常多,而被屏蔽的只是其中部分IP,因此只有部分用户受到了影响.

HTTPS的二三事

- - 细语呢喃
前几篇博文都是有关HTTPS的东西,有人可能会问,什么是HTTPS. 因此,本文主要来解答这些疑惑. Alice和Bob是情人,他们每周都要写信. Alice 写好后,送到邮局,邮局通过若干个快递员到Bob,Bob回信过程类似. 这是可以看成的简单的http的传输. 有一天,Alice觉得,要是写的信中途被人拆开了呢.

HTTPS劫持研究

- - FreeBuf互联网安全新媒体平台
这篇文章描述了我们对哈萨克斯坦政府实施的电信级HTTPS劫持的分析. 哈萨克斯坦政府最近开始使用一个假的根证书颁发机构,对包括Facebook,Twitter和Google等网站在内的HTTPS连接进行中间人(MitM)攻击,在此文中,我们给出了还在进行中的研究的初步结果,以及哈萨克劫持系统中新的技术细节.

最新网址 https://72.52.124.208

- chanjw - 电驴下载基地
精彩世界 cmule.com 我们传递.

最新网址 https://72.52.124.209

- Asker - 电驴下载基地
精彩世界 cmule.com 我们传递.

Google升级HTTPS加密

- 请叫我火矞弟 - Solidot
民不拜天又不拜孔子留此膝何为 写道 "Google 修改了启用HTTPS服务的加密方法,以应对未来技术发展后可能造成的解密行为. 这项升级适用于Gmail、Docs和Google+. 现在的HTTPS实现借助于只有域名主人所掌握的私钥生成的session key来加密服务器和客户端之间的流量. 这种方法使得连接可能被所谓“追溯式解密攻击”(retrospective decryption attack)破解.

Nginx 安装 HTTPS 证书

- - idea's blog
基本步骤可以参考 这篇文章, 但这篇文章有一个致命错误, 就是没有安装 INTERMEDIATE CA, 照样会被浏览器显示证书不可信.. 生成 server.key.orig. 生成 server.csr 和 server.key. 拿着 server.csr 去证书厂商买证书. 买完后, 厂商会给你发两个证书 server.crt 和 server.intermediate.crt.

Android Https请求详细demo

- - 移动开发 - ITeye博客
   Android Https详细请求全方案实现,包括HttpUrlConnection及HttpClient方式实现指定证书及信任所有的实现,不多说了,以下代码都经过详细测试,可以直接使用. * HttpUrlConnection 方式,支持指定load-der.crt证书验证,此种方式Android官方建议.