HTTPS那些事儿(一)

标签: https | 发表时间:2014-06-03 08:37 | 作者:ssjhust123
出处:http://blog.csdn.net

HTTPS那些事儿(一)

最近看了《http权威指南》的几个章节,对HTTPS有了部分了解,同时在网上查阅了一些资料,遂打算记录一下心得,写的仓促,肯定有很多错误的地方,欢迎大家指正。

1.HTTP是什么

那么在介绍https之前,有必要先解释下http。http是一个非常简单又非常复杂的协议,说其简单,是我们每天都在用它,而且又浑然不觉,貌似很简单的样子。但是真正能够把http完全了解清楚,并不是很容易的事情。《http权威指南》诺厚的一本书,都是http相关内容,可知有多么复杂了。

  • 简单来说,HTTP协议是超文本传输协议,是一种可靠的数据传输协议。像我们每天都在使用的web浏览器就是一种http客户端,提供内容的web服务器就是服务器端。http客户端和服务器端构成了万维网的基本组件。web服务器是web资源的宿主,web资源是web内容的源头,最简单的web资源就是web服务器文件系统中的静态文件,如文本文件,html文件,图片,word文件以及mp3,avi等影音文件等;除了静态文件,web资源还可能是根据需要生产内容的软件程序,这些可以看做是动态文件。
  • 一个简单的http请求是从我们打开浏览器,输入url地址访问指定网站开始的。一条请求命令和一个响应结果构成了一个HTTP事务。而几乎世界上所有的HTTP通信都是由TCP/IP协议承载的,这就是我们熟悉的网络ISO七层结构和TCP/IP4层结构,在大部分的情况我们只讨论TCP/IP分层结构。那么具体的访问过程是怎么样的呢?比如我们访问 http://movie.douban.com/subject/10485647/?from=showing 这个链接地址,那么具体包括如下几个过程:
    • 1.浏览器解析初主机名。(主机名是movie.douban.com)
    • 2.浏览器查询DNS服务器查到该主机名对应的ip地址。比如211.147.4.32。如果之前有访问过该站点,则由于DNS记录会被操作系统缓存,就不需要再次解析。此外,如果访问的web服务器使用了DNS轮转的话,则可能不同的时候查到的ip地址是不同的。
    • 3.浏览器获得端口号。这里默认是80.
    • 4.浏览器发起到211.147.4.32端口80的连接。
    • 5.浏览器向服务器发起一条HTTP GET的报文。
    • 6.浏览器从服务器读取一条HTTP响应报文。
    • 7.浏览器关闭连接。
  • 更加详细的过程可以参加《HTTP权威指南》,里面有讲到为了提高性能的并发连接、持久连接以及连接管道化等。此外,这里还有篇文章详细介绍了一个HTTP事务的过程,请参见 从输入URL到页面加载完成发生了什么事情

2.从HTTP到HTTPS

基本的HTTP在web事务中是不够安全的,这也就催生了HTTPS的诞生。HTTPS是在HTTP和TCP之间加了一层传输层的密码安全层-SSL或者后来普遍使用的TLS。HTTPS协议会对web通信过程中的数据加密,杜绝了数据被窃取,总体来说还是很安全的。虽然前不久openssl爆出了一个heartbleed漏洞,不过现在已经修复了。HTTPS在URL中的前缀是HTTPS,默认端口是443,HTTP默认端口80。

2.1基本过程

    由于SSL安全层的存在,HTTPS建立安全传输的过程会略微复杂一些。HTTP客户端(最常用的就是浏览器了)打开一条到web服务器端口443的连接。一旦建立了TCP连接,客户端和服务器端就会初始化SSL层,对加密参数进行沟通并交换密钥。握手完成后,SSL也就初始化完成了,客户端就可以把请求报文发送给安全层了。 当然,这些报文发送给TCP之前,会被加密。

2.2 SSL握手

  • SSL握手是最为复杂的一步了,具体过程如下:
  • 1.客户端(通常就是web浏览器)向服务器发送自己支持的加密规则并请求证书。
  • 2.服务器选择一组加密算法和HASH算法,以及服务器证书发送给浏览器。(SSL支持双向认证,web服务器将服务器证书发送给客户端,然后再将客户端的证书回送给服务器。但是实际应用中很多用户都没有自己的客户端证书,因此服务器也很少会要求客户端证书)
  • 3.浏览器获取服务器证书之后需要验证证书的合法性。具体有以下几个步骤: 服务器证书一般包括如下信息:证书序列号,证书过期时间,站点组织名,站点DNS主机名,站点的公开密钥,证书颁发者名称,证书颁发者的签名。网景公司提出了一种web服务器证书有效性算法是大部分浏览器有效验证服务器证书的基础。主要验证步骤如下:
    • 3.1 日期检测。
      检查证书的起始时间和结束时间,以确保证书仍然有效。如果证书过期了或者还没有被激活,则证书有效性验证失败,浏览器提示错误信息。
    • 3.2 证书颁发者可信度检测。
      每个证书都是由某些证书颁发机构(CA)签发的,它们负责为服务器担保。证书有不同等级,每种证书都需要不同级别的背景验证。 任何人都可以生成证书,但是有些CA是非常著名的组织,它们可以通过非常清晰的流程来验证证书申请人的身份以及商业行为的合法性。因此,浏览器通常会附带一个签名颁发机构的受信列表。如果是未知机构颁发的证书,则浏览器会显示警告信息。
    • 3.3 签名检测。 一旦判定证书颁发者可信,浏览器就需要使用证书颁发者的公钥对信息进行签名,并将其与证书中的签名进行比对,如果两者不同,则信息可能被修改过,不能通过验证。
    • 3.4 站点身份认证
      为防止服务器复制其他人的证书,或拦截其他人的流量,大部分浏览器都会试着去验证证书中包含的DNS主机名是否与正在对话的主机名是否匹配。如果不匹配,则要么是浏览器警告用户,要么就是直接终止连接。 对于虚拟主机(一台服务器有多个主机名)站点上的安全流量处理是比较棘手的,有些流行的web服务器程序只支持一个证书,如果用户请求虚拟主机名,则与证书中的主机名不匹配,这样浏览器会发出警告。一个处理办法是在开始安全事务前,将虚拟主机域名重定向至服务器证书中的官方主机名。(服务器证书中通常只包含一个主机名,但有些CA会为一组服务器创建一些包含了服务器名称列表或者通配域名的证书)
  • 4.如果服务器证书验证通过,则浏览器会生成一串随机的数字作为密码,并用服务器证书中的公钥进行加密。 此外,浏览器使用第2步中商量好的HASH算法对握手消息进行加密,采用的密码就是刚刚生成的那串随机数字。最后将这些信息( 用公钥加密的随机数密码,握手消息,采用HASH算法、随机数密码加密的握手消息签名)发送给服务器。
  • 5.服务器接收浏览器信息,需要进行如下处理:
    • 5.1 用私钥解密获取随机数密码。
    • 5.2 用HASH算法根据该随机数密码对握手消息进行签名,比对浏览器发来的签名和该计算得到的签名是否一致。
    • 5.3 如果签名验证通过,则使用该随机数密码加密一段握手消息,发送给浏览器。
  • 6.浏览器接收握手消息并使用随机数密码以及之前的HASH算法计算握手消息的HASH值。如果与发来的HASH值一致, 此时握手结束,后续的消息都会通过随机数密码来进行加密和解密,使用的加密方法是对称加密。要注意之前的公钥加密和私钥解密使用的是非对称加密算法。

3.HTTPS中用到的算法

HTTPS一般使用的加密与HASH算法如下:   

非对称加密算法:RSA,DSA/DSS

对称加密算法:AES,RC4,3DES

HASH算法:MD5,SHA1,SHA256

非对称加密算法用于之前在传递随机数密码的时候用到。对称加密算法是安全连接建立后用到,用于加快加密解密的速度。HASH算法是用于验证数据完整性。SSL握手过程中如果有任何错误,都会使连接断开,从而阻止了隐私信息的传输。由于HTTPS非常安全,攻击者很难找到下手的地方,于是更多的是采用了假证书的手法来欺骗客户端,这些假证书的识别方法后续再谈。

4.参考资料

作者:ssjhust123 发表于2014-6-3 0:37:40 原文链接
阅读:227 评论:0 查看评论

相关 [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

- -
之前也介绍过 Charles 抓包神器,详细可以看这篇文章: 抓包神器. 这个神器主要是解决在开发过程中快速定位异常,到底是界面展示 Bug 还是接口数据异常. 这样借助这个神器,基本上在开发过程中就能解决很多问题了. 学会手机抓包也能解决开发中很多问题,不仅如此,还能解锁去广告、白嫖 VIP 等骚操作.

最新网址 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.