http认证原理和https

编程技术  /  houtizong 发布于 3年前   61

一.基础介绍

        在URL前加https://前缀表明是用SSL加密的。 你的电脑与服务器之间收发的信息传输将更加安全。

        Web服务器启用SSL需要获得一个服务器证书并将该证书与要使用SSL的服务器绑定。

http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。http的连接很简单,是无状态的。

        HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。

 

二.http认证

1.Http定义了两个官方认证:基本认证和摘要认证,两者遵循相同的流程:

        a.客户端发起GET请求

        b.服务器响应401 Unauthorized,WWW-Authenticate指定认证算法,realm指定安全域

        c.客户端重新发起请求,Authorization指定用户名和密码信息

        d.服务器认证成功,响应200,可选Authentication-Info

 

2.基本认证

        将“用户名:密码”打包并采用Base-64编码。

        缺点:密码很容易被窥探,可以挟持编码后的用户名、密码信息,然后发给服务器进行认证;可以与SSL配合,隐藏用户名密码。

 

3.摘要认证

        不以明文发送密码,在上述第2步时服务器响应返回随机字符串nonce,而客户端发送响应摘要 =MD5(HA1:nonce:HA2),其中HA1=MD5(username:realm:password),HA2=MD5(method:digestURI)

在HTTP 摘要认证中使用 MD5 加密是为了达成"不可逆的",也就是说,当输出已知的时候,确定原始的输入应该是相当困难的。

        如果密码本身太过简单,也许可以通过尝试所有可能的输入来找到对应的输出(穷举攻击),甚至可以通过字典或者适当的查找表加快查找速度。

 

4.http摘要认证的安全性增强如下:

        a.密码并非直接在摘要中使用,而是 HA1 = MD5(username:realm:password)。这就允许一些实现(如,JBoss DIGESTAuth)仅存储 HA1 而不是明文密码。

        b.在 RFC 2617 中引入了客户端随机数 nonce,这将使客户端能够防止选择明文攻击(否则,像Rainbow table这类东西就会成为摘要认证构架的威胁)。

        c.服务器随机数 nonce 允许包含时间戳。因此服务器可以检查客户端提交的随机数 nonce,以防止重放攻击。

        d.服务器也可以维护一个最近发出或使用过的服务器随机数nonce的列表以防止重用。

 

5.在安全性方面,摘要访问认证有几个缺点:

        a.RFC 2617 中的许多安全选项都是可选的。如果服务器没有指定保护质量(qop),客户端将以降低安全性的早期的 RFC 2069 的模式操作。

        b.摘要访问认证容易受到中间人攻击。举例而言,一个中间人攻击者可以告知客户端使用基本访问认证或早期的RFC 2069摘要访问认证模式。

        进一步而言,摘要访问认证没有提供任何机制帮助客户端验证服务器的身份。

        一些服务器要求密码以可逆加密算法存储。但是,仅存储用户名、realm、和密码的摘要是可能的。

        它阻止了使用强密码哈希函数(如bcrypt)保存密码(因为无论是密码、或者用户名、realm、密码的摘要都要求是可恢复的)。

 

三.https

1.介绍https之前需要了解相关名词

        密钥:改变密码行为的数字化参数;

        对称密钥加密:编码、解码采用同一个密钥,通信双方对话前一定要有一个共享的保密密钥;破解者需要遍历每一个可能密钥;

        公开密钥加密:使用两个非对称密钥,分别用于编码和解码,前者是公共的,后者只有本地主机保存;RSA为MIT发明的公开密钥加密系统;

        数字签名:即加密的校验和,可防止报文被篡改;

        a.A将变长报文提取为定长摘要,对其应用签名函数(使用用户的私钥作参数),将签名附加在报文末尾;

        b.B接收报文时对签名进行检查,使用公开密钥进行反函数,若拆包后摘要与明文摘要不匹配,说明报文被篡改或没有使用A的私钥;

        数字证书:包含对象名、过期时间、证书发布者、公开密钥、数字签名,大部分证书都使用X.509 V3格式;

        通过https建立一个安全web事务后,浏览器会主动获取服务器的数字证书,若没有证书则安全连接失败。

 

2.https

        将http同一组基于证书的加密技术组合一起,SSL介于http和tcp之间,负责http报文的加密和解密;

        若URL为https,客户端打开一条到服务器443端口的连接,以二进制格式与服务器握手交换SSL安全参数,并附上加密的http命令;

        SSL协议可分为两层:

        1).SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。

        2).SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

 

3.SSL协议的工作流程

        a.服务器认证阶段

        1).客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接;

        2).服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息;

        3).客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器;

        4).服务器恢复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。

        b.用户认证阶段

        经认证的服务器发送一个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证。

 

4.握手过程

        SSL协议既用到了公钥加密技术又用到了对称加密技术,对称加密技术虽然比公钥加密技术的速度快,可是公钥加密技术提供了更好的身份认证技术。

        1).客户端的浏览器向服务器传送客户端SSL 协议的版本号,加密算法的种类,产生的随机数。

        2).服务器向客户端传送SSL 协议的版本号,加密算法的种类,随机数以及其他相关信息,同时服务器还将向客户端传送自己的证书。

        3).客户利用服务器传过来的信息验证服务器的合法性,证书是否过期,发行服务器证书的CA 是否可靠,发行者证书的公钥能否正确解开服务器证书的“发行者的数字签名”

        4).客户端随机产生一个用于后面通讯的“对称密码”,然后用服务器的公钥对其加密,传给服务器。

        5).服务器和客户端用相同的主密码,即对称密钥用于SSL 协议的安全数据通讯的加解密通讯.

 

5.https隧道 

        建立连接时客户端采用服务器的公开密钥对发送数据加密,代理就无法读取http首部,也就不知道将请求转向何处;

        https ssl隧道协议允许客户端先告知代理欲连接的服务器和端口,即通过connect方法明文发送端点信息,代理建立同服务器的tcp连接,客户端直接采用此隧道同服务器通信;

        隧道:通过http连接发送非http流量。

 

文章来源:http://fuyi68616.iteye.com/blog/2179125

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

留言需要登陆哦

技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成

网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];

      订阅博客周刊 去订阅

文章归档

文章标签

友情链接

Auther ·HouTiZong
侯体宗的博客
© 2020 zongscan.com
版权所有ICP证 : 粤ICP备20027696号
PHP交流群 也可以扫右边的二维码
侯体宗的博客