新闻动态_- 荃润信息
  • 等级保护
  • 亚搏888等级保护测评系统
  • 安全服务
  • 风险评估
  • 等级保护体系建设
  • ISO27001体系建设
  • 敏感信息保护
  • 运维管理
  • 运维审计系统
  • 网络安全态势感知服务平台
  • 般若漏洞扫描系统
  • 信息系统运维保障平台
  • 网络安全检查预警软件
  • 主动防御系统
  • 安全意识
  • 安全意识测试软件
  • 其他产品
  • 数据交互平台
  • 智码开门系统
  • 解决方案
  • 央企亚搏888风险咨询
  • 金融行业亚搏888风险
  • 运营商敏感信息保护
  • 大型企业亚搏888建设
  • 活动专区
  • 免费体检
  • 免费体验
  • 商业合作
  • 优惠政策
  • 服务体系
  • 客服服务
  • 联系我们
  • 小信课堂



  • HTTPS的原理介绍

    作者:荃润信息新闻动态 发布时间:2020-03-18浏览次数:

    Https 原理学习

     

    https 与 http 相比,仅仅多了一层的 tls:

    为什么要加入这一层tls安全层呢?

    是因为最初的 HTTP 存在下面三个问题:

    1、数据在裸奔。数据以明文的方式传播

    2、无法验证通信双方的身份

    3、无法防止数据被篡改

    我们先来解决第一个问题,如何给数据加密?

    密码学加密方式只有对称密码和非对称密码

    对称密码:加密的加密和解密使用同一密钥。

    从流程图中得到,这种加密方式在双方通信时候需要预先准备好密钥。但是服务器和浏览器之间传递密钥的过程被人监听,相当于明文传输。倘若预先把密钥保存在本地,到需要建立连接在取出,那么浏览器需要预存好世界上所以的 HTTPS 网站的密钥,显然不现实。
    这种加密方式, 也称为非对称密钥加密,使用一对密钥用于加密和解密,分别为公开密钥和私有密钥。公开密钥所有人都可以获得,通信发送方获得接收方的公开密钥之后,就可以使用公开密钥进行加密,接收方收到通信内容后使用私有密钥解密。因为公钥加密,私钥解密,即使传输中的公钥被监听了,也解不开传输的流量。但是仅仅是客户端到服务器这条传输链路保证了传输的安全,那么怎么保证服务端下行到客户端这条链路的安全呢?

    首先 Client 发起想要连接 Server,则会发送 ClientHello,这个 Hello 信息标识就是 Client 最高支持的 TLS 版本,支持的密码套件,Session 信息以及压缩算法。

    而 Server 收到 Client 的请求后,会发送与协商确定 Client 的密码套件,同时会发送 Server Certificate 证书信息和服务器公钥。

     

    Client 收到 ServerHello 后,会验证 Server 的证书信息是否合法,如果合法,则产生随机码(这一步又涉及到TLS的密钥计算,太过复杂了,大家有兴趣可以自己去查阅),作为对称密钥加密密钥,对随机码使用接收到的服务器公钥进行加密。

    现在来看第二个问题:如何验证通信双方的身份?

    数字证书认证机构(CA,Certificate Authority)是客户端与服务器双方都可信赖的第三方机构。服务器的运营人员向 CA 提出公开密钥的申请,CA 在判明提出申请者的身份之后,会对已申请的公开密钥做数字签名,然后分配这个已签名的公开密钥,并将该公开密钥放入公开密钥证书后绑定在一起。 

    进行 HTTPS 通信时,服务器会把证书发送给客户端,客户端取得其中的公开密钥之后,先进行验证,如果验证通过,就可以开始通信。 

     

    举个例子

    上图中的步骤 1、2、3、4 并不是每次都需要这样请求。1、2、3 步只需要在注册新的公钥的时候才会进行。第四步仅在第一次需要使用公钥密码的时候需要,之后保存到了电脑中,就不用每次都请求公钥了。 

    为了防止消息被篡改和被伪造,使用数字签名技术,服务端使用私钥对消息的 hash 进行加密,再把 hash 和签名发送给客户端,随后客户端利用公钥进行解密,比对传输的 hash 是否一致。如果一致就证明消息未被篡改和伪造。

    怎么才能够对流量进行解密?

    网上搜索大多都是两种解法,一种是导入 RSA 私钥进入 wireshark。第二种是配置 SSLKEYLOGFILE。

    第一种:导入 RSA 私钥进入 wireshark

    1、拿到百度的服务器证书

    使用 fiddler 的中间人代理技术拿到含有私钥的服务器证书。

    1) 打开 fiddler 并启用 https 代理服务

    2) 用配置了 fiddler 代理的浏览器访问百度

    3) 运行 “certmgr.msc”打开证书管理器

    4) 从 Personal/Certificates 目录下找到 *.baidu.com 的证书,右键所有任务-导出

    2、取出证书中的私钥

    使用 openssl 取出私钥。

    1) 将 pfx 证书转为 pem 证书

    命令行:

    openssl pkcs12 -in <pfx证书路径> -nodes -out <输出的pem证书路径(.pem)>

    2) 从 pem 证书中取出私钥

    命令行:

    openssl rsa -in <pem证书路径> -out <输出的私钥文件路径(.key)>

    3) 点击编辑——>首选项——>协议——>SSL(有的版本只有 TLS),导入 RSA key:

    导入服务器证书:

    Wireshark 会对捕获的报文进行解密: 

    这种方法仅仅对于使用 RSA 的密钥交换有用,在知晓了 RSA 密钥,就可以导入 wireshark 来解密流量。但是目前大多数的 HTTPS 网站都是采用 DH 密钥交换。由于 Premaster Secret 无需交换,中间人就算有私钥也无法获得 Premaster Secret 和 Master Secret。也就是说 Wireshark 无法通过配置 RSA Private Key 的方式解密「使用 ECDHE 进行密钥交换」的加密流量。

    第二种 SSLKEYLOGFILE

     

    在系统环境变量加入SSLKEYLOGFILE这个变量,并选择导出目录

    Firefox 和 Chrome 都会在系统环境变量存在 SSLKEYLOGFILE 文件路径时,将每个 HTTPS 连接产生的 Premaster Secret 或 Master Secret 存下来。有了这个文件,Wireshark 就可以轻松解密 HTTPS 流量 

     

    然后打开 wireshark,ctrl+shift+P 在 Protocols 选择 TLS 协议,并导入即可

    即可解除加密

    正常的通信只有 Client,Server。

    中间人攻击的时候,加入了一个中间方。Client 信任中间方的证书后,就会和中间方进行通信。然后中间方拿到 Client 发送的请求,就会伪装成 Client 对服务方建立请求。监听双方的通信。

    所以只要 Client 信任了 burp 的证书,Client 会和 burp 建立 Https 连接。burp 收到 Client 的请求后,则会去和 Server 建立连接,伪造 Client 通信。

     

    Https 有单端验证和双端验证

    一般 Web 应用都是采用 SSL 单向认证的,原因很简单,用户数目广泛,且无需在通讯层对用户身份进行验证,一般都在应用逻辑层来保证用户的合法登入。但如果是企业应用对接,情况就不一样,可能会要求对客户端(相对而言)做身份验证。这时就需要做 SSL 双向认证。 

    更多精彩亚搏888资讯尽在荃润信息微信公众号

    欢迎大家扫码关注!

     

     

  • 服务热线400 996 5989
  • 全方位的了解服务
  • 精准的服务推荐
  • 1对1贴心服务
  • 7*24小时服务热线
  • 联系我们了解更多