Http And Https之深度解析

Https

场景:

HTTP是明文传输的,也就意味着,介于发送端、接收端中间的任意节点都可以知道你们传 输的内容是什么。这些节点可能是路由器、代理等。 举个常见的例子,用户登陆。用户 输入账号,密码,采用HTTP的话,只要在代理服务器上做点手脚就可以拿到你的密码了。 用户登陆 –> 代理服务器(做手脚)

实际授权服务器 在发送端对密码进行加密?没用的,虽然别人不知道你原始密码是多少, 但能够拿到加密后的账号密码,照样能登陆。 http协议是目前非常普及的应用层传输协议,了解https之前要先知道http的缺点.

 

1.通信使用明文(不加密),内容可能被窃听.(抓包工具可以获取请求和响应内容)(fiddler)

Http And Https之深度解析_第1张图片

 

 

2.不验证通讯方的身份,可能遭遇伪装劫持.(任何人都能发送请求,不管对方是谁都会返回响 应).

Http And Https之深度解析_第2张图片

 

3.无法证明报文的完整性,可能会遭篡改.(没有办法确认发出的请求/响应和接收到的请求/响 应前后一致)

 

Http And Https之深度解析_第3张图片

 

这些问题不止会在http上出现,在其他未加密的协议中也会出现这类问题

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

为了解决上述问题,需要再http上再加入加密处理和认证等机制.我们把添加了加密和认证机制的

http称之为https(http secure)

HTTPS是身披SSL保护外衣的HTTP

HTTPS并非应用层的一种新协议,只是http通讯接口部分用SSL(secure socket layer)和

TLS(transport layer security)协议代替.

通常,http直接和tcp通信.当使用ssl时,则演变成先和ssl通信,再由ssl和tcp通讯.so,所谓

https其实就是身披ssl保护外衣的http.

 

HTTPS简介

 

HTTPS(Hypertext Transfer Protocol Secure):超文本传输安全协议。

HTTP的URL由“http://”起始,默认端口为80,HTTPS的URL由“https://”起始,默认

端口为443

HTTPS报文中的任何东西都被加密,包括所有报头和荷载。这样攻击者就获取不到有用的 信息。

 

SSL/TLS

1、TLS历程:

1994年,NetScape公司设计了SSL协议(Secure Sockets Layer)的1.0版,但是未发布。

1995年,NetScape公司发布SSL 2.0版,很快发现有严重漏洞。

1996年,SSL 3.0版问世,得到大规模应用。

1999年,互联网标准化组织ISOC接替NetScape公司,发布了SSL的升级版TLS 1.0版。

2006年,升级到TLS 1.1版

2008年,升级到TLS 1.2版

2011年,TLS 1.2的修订版 目前,应用广泛的是TLS 1.0,然后是SSL 3.0。但是,主流浏览器都已经实现了TLS 1.2 的支持。 TLS 1.0也可以标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3。 前一段时间苹果对HTTPS支持的要求里面就要求为TLS1.2版本。 Ssl/tls

如图:

传输加密的流程  原先是应用层将数据直接给到TCP进行传输,现在改成应用层将数据给到TLS/SSL,将数据加密 后,再给到TCP进行传输。

 

Http And Https之深度解析_第4张图片

 

 

TLS/SSL 原理

HTTPS 协议的主要功能基本都依赖于 TLS/SSL 协议,本节分析安全协议的实现原 理。

TLS/SSL 的功能实现主要依赖于三类基本算法:散列函数 Hash对称加密和非对 称加密

其利用非对称加密实现身份认证密钥协商,对称加密算法采用协商的密钥对数据 加密,基于散列函数验证信息的完整性。

 

Http And Https之深度解析_第5张图片

散列函数 Hash,常见的有 MD5、SHA1、SHA256,该类函数特点是函数单向不可逆、对

输入非常敏感、输出长度固定,针对数据的任何修改都会改变散列函数的结果,用于防止信

息篡改并验证数据的完整性;对称加密,常见的有 AES-CBC、DES、3DES、AES-GCM等,

相同的密钥可以用于信息的加密和解密,掌握密钥才能获取信息,能够防止信息窃听,通信

方式是1对1;非对称加密,即常见的 RSA 算法,还包括 ECC、DH 等算法,算法特点是,密

钥成对出现,一般称为公钥(公开)和私钥(保密),公钥加密的信息只能私钥解开,私钥加密

的信息只能公钥解开。因此掌握公钥的不同客户端之间不能互相解密信息,只能和掌握私钥

的服务器进行加密通信,服务器可以实现1对多的通信,客户端也可以用来验证掌握私钥的

服务器身份。

       在信息传输过程中,散列函数不能单独实现信息防篡改,因为明文传输,中间人可以修

改信息之后重新计算信息摘要,因此需要对传输的信息以及信息摘要进行加密;对称加密的

优势是信息传输1对1,需要共享相同的密码,密码的安全是保证信息安全的基础,服务器

和 N 个客户端通信,需要维持 N 个密码记录,且缺少修改密码的机制;非对称加密的特点是

信息传输1对多,服务器只需要维持一个私钥就能够和多个客户端进行加密通信,但服务器

发出的信息能够被所有的客户端解密,且该算法的计算复杂,加密速度慢。 结合三类算法的特点,

TLS 的基本工作方式是,客户端使用非对称加密与服务器进 行通信,实现身份验证并协商对称加密使用的密钥,

然后对称加密算法采用协商密钥对信息 以及信息摘要进行加密通信,不同的节点之间采用的对称密钥不同,

从而可以保证信息只能 通信双方获取。 身份验证­CA 和证书 解决上述身份验证问题的关键是确保获取的公钥途径是合法的,

能够验证服务器的 身份信息,为此需要引入权威的第三方机构 CA。CA 负责核实公钥的拥有者的信息,

并颁发 认证”证书”,同时能够为使用者提供证书验证服务,即 PKI 体系。

 

     基本的原理为,CA 负责审核信息,然后对关键信息利用私钥进行”签名”,公开 对应的公钥,客户端可以利用公钥验证签名。CA 也可以吊销已经签发的证书,基本的方式 包括两类 CRL 文件和 OCSP。

 

Http And Https之深度解析_第6张图片

 

a.服务方 S 向第三方机构CA提交公钥、组织信息、个人信息(域名)等信息并申请认证;

b.CA 通过线上、线下等多种手段验证申请者提供信息的真实性,如组织是否存 在、企业是否合法,是否拥有域名的所有权等;

c.如信息审核通过,CA 会向申请者签发认证文件­证书。 证书包含以下信息:申请者公钥、申请者的组织信息和个人信息、签发机构 CA 的 信息、有效时间、证书序列号等信息的明文,同时包含一个签名; 签名的产生算法:首先,使用散列函数计算公开的明文信息的信息摘要,然后,采 用 CA 的私钥对信息摘要进行加密,密文即签名;

d.客户端 C 向服务器 S 发出请求时,S 返回证书文件;

e.客户端 C 读取证书中的相关的明文信息,采用相同的散列函数计算得到信息摘 要,然后,利用对应 CA 的公钥解密签名数据,对比证书的信息摘要,如果一致,则可以确 认证书的合法性,即公钥合法;

f.客户端然后验证证书相关的域名信息、有效时间等信息;

g.客户端会内置信任 CA 的证书信息(包含公钥),如果CA不被信任,则找不到对应  CA 的证书,证书也会被判定非法。 在这个过程注意几点:

 

a.申请证书不需要提供私钥,确保私钥永远只能服务器掌握;

b.证书的合法性仍然依赖于非对称加密算法,证书主要是增加了服务器信息以及签名;


c.内置 CA 对应的证书称为根证书,颁发者和使用者相同,自己为自己签名,即自 签名证书;

d.证书=公钥+申请者与颁发者信息+签名;

 

对称加密和非对称加密

 

1.概念

对称加密:文件加密和解密使用相同的密钥 

非对称加密:需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。

用公钥对数据进行加密,只有用对应的私钥才能解密;如果用私钥对数据进行加密,那么只

有用对应的公钥才能解密。

公钥 :用于向外发布,任何人都能获取。 私钥 :要自己保存,切勿给别人,一般只有运维的人才知道。

2、算法

对称加密常用的算法:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、 SKIPJACK、AES等。 非对称加密常用的算法: RSA,ECDHE,DH,DHE、Elgamal、背包算法、Rabin、等。

3、能否被破解 RSA加密:

还没人声称以破解。世纪金融体系就是靠着1RSA加密建立的,破解了这个,就 可以伪造整个金融体系。 AES加密:标准的128位AES是10轮的。现在针对7轮的AES已经破解了,家用机几分钟就能 搞定。破解标准的10轮,家用电脑,还不足以短时间内破解。。大型机已经可以算是破解 了128位的,所以现在低也要求256位的AES。

 

常见加密算法

 

1.MD5  

MD5用的是哈希函数,任意长度字符串生成128bit的大整数,整个过程不可逆,不直接用 于加密文件。它的典型应用是对一段信息产生信息摘要,以防止被篡改。缺点:安全性较 低,优点:简单,快速。

2、BASE64

Base64是一种编码方式,主要用于将二进制数据转换为文本数据,方便使用HTTP协议等, 是可逆的。

3、RSA

非对称加密,公钥私钥互相可以加密&解密,原理是素数乘积,但很难被分解还原。公钥用 于数据进行加密,私钥对数据解密,公钥和私钥同时生成,并且一一对应,如:A拥有公钥, B拥有公钥和私钥,A将数据通过公钥进行加密后,发送密文给B,B可以通过私钥和公钥解 密。对于比较敏感的数据,如用户信息(登陆、注册等),客户端发送使用RSA加密,服务 器返回使用DES(AES)加密。

4、DES 对称机密,A用密钥进行AES机密后,B用同样的密钥对密文进行解密。

 

参考文章:Android HTTPS详解

http://m.blog.csdn.net/zinss26914/article/details/51143499

 

3. 握手阶段(客户端与服务器端安全地协商出一个对称加密算法

 

1)客户端发起一个https的请求,把自身支持的一系列Cipher Suite(密钥算法套件,简称 Cipher)发送给服务端 (客户端发送请求给服务器,请求包含客户端生成的一个随机数和客户端版本信息。

1. .支持的协议版本,比如TLS 1.0版
2).一个客户端生成的随机数,稍后用于生成“对话密钥”。

3).支持的加密方法,比如RSA公钥加密

4).支持的压缩方法。

 

2)服务端,接收到客户端所有的Cipher后与自身支持的对比,如果不支持则连接断开,反之则会从中选出一种加密算法和HASH算法 以证书的形式返回给客户端 证书中还包含了 公钥 颁证机构 网址 失效日期等等。(服务 端回复给客户端,包括服务器证书、服务端生成的一个随机数、确定加密密算法。

1).确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一 致,服务器关闭加密通信。

2).一个服务器生成的随机数,稍后用于生成“对话密钥”。

3).确认使用的加密方法,比如RSA公钥加密。

4).服务器证书。  此时证书公钥(他是第三方机构的私钥加密之后的公钥)

 

3)客户端收到服务端响应后会做以下几件事 客户端收到服务器回应以后,首先验证服务器证书。如果证书不是可信机构颁发,或者证书 中的域名与实际域名不一致,或者证书已经过期,就会向访问者显示一个警告,由其选择是 否还要继续通信。 如果证书没有问题,客户端就会从证书中取出服务器的公钥。然后,向服务器发送下面三项 消息。

1).一个随机数。该随机数用服务器公钥(证书公钥)加密,防止被窃听。

2).编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
3).客户端握手结束通知,表示客户端的握手阶段已经结束。这一项通常也是前面发送的所有内容的hash值,用来供服务器校验。

3.1 验证证书的合法性   颁发证书的机构是否合法与是否过期,证书中包含的网站地址是否与正在访问的地址 一致等 证书验证通过后,在浏览器的地址栏会加上一把小锁(每家浏览器验证通过后的提示不 一样 不做讨论)

3.2 生成随机密码(三个随机数通过一个密钥导出器终导出一个对称密钥。

[明文] 客户端发送随机数client_random和支持的加密方式列表

[明文] 服务器返回随机数server_random,选择的加密方式和服务器证书链

[RSA] 客户端验证服务器证书,使用证书中的公钥加密premaster secret发送给服务端 服务端使用私钥解密premaster secret

两端分别通过client_random,server_random和premaster secret生成master  secret,用于对称加密后续通信内容

 

ca证书和自签名证书(自己服务器生成的证书) 如果证书验证通过,或者用户接受了不授信的证书,此时浏览器会生成一串随机数, 然后用证书中的公钥加密。

 

3.3 HASH握手信息 用开始约定好的HASH方式,把握手消息取HASH值, 然后用 随机数加密(公钥加 密的) “握手消息+握手消息HASH值(签名)” 并一起发送给服务端 在这里H之所以要取握手消息的HAS值,主要是把握手消息做一个签名,用于验证握手 消息在传输过程中没有被篡改过。

 4)服务端拿到客户端传来的密文,用自己的私钥来解密握手消息取出随机数密码,再用随 机数密码 解密 握手消息与HASH值,并与传过来的HASH值做对比确认是否一致。

然后用随机密码加密一段握手消息(握手消息+握手消息的HASH值 )给客户端  5)客户端用随机数(协商之后的私钥)解密并计算握手消息的HASH,如果与服务端发来 的HASH一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并 利用对称加密算法进行加密  

因为这串密钥只有客户端和服务端知道,所以即使中间请求被拦截也是没法解密数据 的,以此保证了通信的安全

 

非对称加密算法:RSA,DSA/DSS 在客户端与服务端相互验证的过程中用的是对称加 密  对称加密算法:AES,RC4,3DES 客户端与服务端相互验证通过后,以随机数作为密钥 时,就是对称加密 HASH算法:MD5,SHA1,SHA256 在确认握手消息没有被篡改时

 

1.浏览器将自己支持的一套加密规则发送给网站。

 2.网站从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览 器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。  

3.浏览器获得网站证书之后浏览器要做以下工作:

 a) 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问 的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不 受信的提示。

 b) 如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数的密码, 并用证书中提供的公钥加密。  

c) 使用约定好的HASH算法计算握手消息,并使用生成的随机数对消息进行加密,后将之 前生成的所有信息发送给网站。  

4.网站接收浏览器发来的数据之后要做以下的操作:  

a) 使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,并验证 HASH是否与浏览器发来的一致。  

b) 使用密码加密一段握手消息,发送给浏览器。  

5.浏览器解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结 束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密。

 

总结: 

服务器

用RSA生成公钥和私钥 把公钥放在证书里发送给客户端,私钥自己保存 客户端首先向一个权威的服务器检查证书的合法性,如果证书合法,客户端产生一段随 机数,这个随机数就作为通信的密钥,我们称之为对称密钥,用公钥加密这段随机数,然后 发送到服务器 服务器用密钥解密获取对称密钥,然后,双方就已对称密钥进行加密解密通信了。

 

实例讲解:

http://blog.csdn.net/gusgao/article/details/53870256

 

https参考资料

https://wenku.baidu.com/view/5d4e3b1cf705cc1754270987.html

 

希望我的总结能给您一点帮助!

 

 

 

 

你可能感兴趣的:(Android)