中间方攻击

在密钥协商阶段,通信双方都需要向对方提供密钥,拿DH密钥协商举例,客户端需要把自己的公钥发送给服务器端,服务器端把DH参数和服务器公钥发送给客户端,最终双方都持有对方的公钥拿来加密用,自己的私钥用来解密。RSA密钥协商也差不多,不过两种协商算法都有可能会遭到中间方攻击,导致密码套件泄露,来看个例子,在RSA密钥协商中,中间方是如何“获取”通信双方的密码套件的。

  1. RSA密钥协商,首先客户端向服务器端发送连接请求,希望服务器端回应并发送本次通信的RSA公钥。
  2. 中间方把客户端的连接请求截获,然后把自己的连接请求发送给服务器端,服务器端生成密钥对后,响应发送RSA公钥给中间方。
  3. 中间方保留服务器端公钥后,自己生成一个RSA密钥对,并把公钥发送给客户端,也就是把真正的服务器端公钥替换掉了。
  4. 客户端收到中间方的公钥后,误以为是服务器端公钥,继续进行密钥协商,通过随机数生成器生成了一个预备主密钥,并使用了中间方公钥对其进行机密,发送给服务器端。
  5. 中间方继续截获客户端发送的预备主密钥,用自己的私钥解密出预备主密钥后,再自己生成一个预备主密钥,用第一次或得到服务器端公钥加密,发送给服务器端。
  6. 服务器端接收到中间方发来的预备主密钥,并用自己的私钥解密,发现能正确解出预备主密钥,误以为密钥协商完成。
  7. 此时,客户端持有的是中间方公钥,服务器端持有的是中间方的预备主密钥,中间方却拥有服务器公钥和客户端生成的真正的预备主密钥,接下来中间方就可以随意伪造信息,同时不让通信双方发现,来看看它是怎么实现。
  8. 由于客户端持有的是中间方公钥,客户端使用它来加密信息,并发送给服务器,中间方截获密文后,因为拥有客户端生成的预备主密钥,可以知道客户端使用的加密算法,例如AES,解密出明文,最后再自己加密发送给服务器端。
  9. 由于服务器端持有的是中间方的预备主密钥,解密出的明文可能是被中间修改过的,到这一步,中间方攻击完成,通信双方的对话泄露了,同时存在消息被篡改的风险。

发生中间方攻击的原因,是通信双方没有去验证对方的身份,接受了信息后就误认为是由对方发出的,殊不知自己发送的回应消息早已被截获,导致信息泄露。例如客户端访问某一个服务器,接收到一个服务器公钥,但是客户端并不去确认这个服务器公钥是否属于自己要访问的服务器的,所以为了解决上述的中间方攻击问题,需要在通信时对对方做身份验证,身份验证除了数字签名外,再HTTPS中还有PKI中的CA证书。

CA证书

PKI公钥基础设施

PKI公钥基础设施,基于公开密钥算法解决网络安全的问题,但是它不是TLS/SSL协议的一部分,是一个标准,里面包含软件硬件,法律流程等,在基于这个标准下发展出的安全技术都统称为PKI,例如CA证书授权也是PKI的一部分。PKI的组成部分有很多的,例如密钥管理,证书管理和策略管理等,CA是其中核心的一部分。PKI的作用就是为通信双方提供身份认证,通过证书进行公钥管理,使用数字签名技术,由可信赖的第三方组织进行证书管理,包括创建证书,存储,更新证书等。浏览器对第三方组织是信任的,由此来完成身份认证。

组成部分

PKI大致由以下部分组成:

  1. CA机构,负责创建,发放和管理证书的机构。服务器若想申请证书,通常先自己生成一个密钥对,然后根据密钥对生成CSR证书请求文件,并发送给CA机构。CA机构对服务器实体身份进行验证后,使用CA机构的密钥对来给服务器实体证书进行签名发放。
  2. RA机构,数字证书注册机构,是CA机构的一部分,负责验证证书申请者的身份。
  3. 证书验证软件,如浏览器,浏览器访问网站时会验证该网站的证书,浏览器必须是信任CA机构的,这样才能完成验证,就像我们的身份证一样,所有的机构组织都会信任,这样才能对我们进行身份验证。
  4. CA证书仓库,负责保存所有的CA机构发放的证书,包括过期的和被插销的证书。
  5. 申请证书的实体,例如某一需要申请证书的网站。

X.509和ASN.1标准

X.509标准是对证书的规范化,大部分Web应用使用HTTPS协议,都是使用的该标准的证书。X.509协议规范了证书的签发,校验,以及证书的结构,服务器向CA机构申请证书的流程和签发证书的流程,校验证书包括域名,有效期等。ASN.1标准则是用来描述证书的,使用伪代码形式,描述X.509标准证书的数据结构,简单看看证书结构里都包含了哪些信息:

证书结构

Certificate  ::=    SEQUENCE {tbsCertificate    TBSCertifivate,signatureAlgorithm   AlgorithmIdentifier,signature   BIT STRING
}TBSCertificate ::=    SEQUENCE {version   [0] Version DEFAULT v1,serialNumber CertificateSerialNumber,signature   AlgorithmIdentifier,issuer  Name,validity   Validity,subject    Name,subjectPublicKeyInfo   SubjectPublicKeyInfo,issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL,-- If present, version MUST be v2 or v3subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL,-- If present, version MUST be v2 or v3extensions [3] Extensions OPTIONAL-- If present, version MUST be v2 or v3 --
}

第一个version顾名思义就是版本号了,由v1,v2和v3三个版本,目前最通用的是v3版本,version数据结构是一个枚举类型,version [0]就是默认的v1版本,[1]和[2]分别是v2和v3。serialNumber是证书的编号,是唯一标识该证书的。signature就是该证书使用的签名算法,浏览器在验证证书时先要知道证书使用的签名算法。issuer标识CA机构名,由三部分组成,国家C,组织O和子组织CN组成。validity是证书的有效期,Validity结构体中的两个参数notBefore和notAfter标识着证书的有效期在这个时间段范围内。

Validity ::= SEQUENCE {notBefore    Time,notAfter   Time
}

subject标识服务器名,使用的Name类型和issuer,CA机构名的Name类型是一样的,C标识国家,O标识组织,不过CN在这里标识的不是子组织名而是服务器的域名。

subjectPublicKeyInfo标识的是服务器公钥,是十分重要的部分,该结构体中包含了两部分,公钥和使用的公开密钥算法:

subjectPublicKeyInfo ::= SEQUENCE {algorithm    AlgorithmIdentifier,subjectPublicKey    BIT STRING
}

issuerUniqueID标识CA机构编号,subjectUniqueID标识服务器端编号,它们都是唯一的。最后的extension标识证书扩展,使用证书扩展可以为证书添加新的属性。

CSR证书请求文件

证书申请大致流程

最后再把CSR证书请求文件整理下,如果一个服务器想要申请证书,大致流程,首先服务器端要自己生成一个密钥对,公开密钥或者RSA密钥对,然后服务器端生成一个CSR证书请求文件,里面包含了服务器网站域名,公钥等信息,将其发送给CA机构。CA机构在核实过服务器身份后,用自己密钥对的私钥对CSR文件进行签名,得到的签名值加载CSR文件后面,得到证书文件,当然证书文件中还包括CA机构的名称,使用的算法等信息。最后CA机构再把证书文件发回给服务器,之后,浏览器访问该服务器,服务器端就会把证书文件和自己的服务器公钥发送给客户端进行验证。浏览器由于本身内置了CA机构的根证书,根证书里包含了CA机构的公钥,用于验证签名用,待验证成功确定证书是由CA机构签发之后,浏览器验证服务器端的身份,从CA证书中提取出服务器公钥和域名,确认域名没错后,再验证服务器公钥和客户端自己在建立服务器连接时得到的服务器公钥是否一致,一致,则验证身份成功,在建立连接阶段得到的服务器公钥确实是该域名的服务器的。

CSR文件结构

CSR证书请求文件里包含了服务器公钥,域名,CA机构签名值,还有CA机构的名称,使用的算法等。看看ASN.1标准下的CSR文件描述:

CertificationRequest ::= SEQUENCE {certificationRequestInfo CertificationRequestInfo,signatureAlgorithm AlgorithmIdentifier,signature   BIT STRING
}

certificationRequestInfo表示的是请求信息,signatureAlgorithm顾名思义是签名算法,signature是签名值。服务器在发送CSR文件前会先对CSR文件进行签名,把服务器端的一些信息放到里面去:

CertificationRequestInfo ::= SEQUENCE {version  INTEGER { v1(0) } (v1, v2, v3),subject  Name,subjectPKInfo  SubjectPublicKeyInfo,attributes [0] Attributes
}

version版本号,subject是服务器名称,其中包含CN域名,subjectPKInfo就是服务器公钥,attributes是可选信息,存放服务器的其他信息。

最后,服务器使用私钥对CSR文件进行签名,生成最终的CSR文件,发送给CA机构,实现证书申请。

总结中间方攻击和CA认证中心相关推荐

  1. 实战:搭建CA认证中心,使用CA证书搭建HTTPS

    CA认证中心服务端:xuegod63.cn                         IP:192.168.0.61 客户端                  :xuegod64.cn      ...

  2. CentOS 7 搭建CA认证中心实现https取证

    CA认证中心简述 CA :CertificateAuthority的缩写,通常翻译成认证权威或者认证中心,主要用途是为用户发放数字证书 功能:证书发放.证书更新.证书撤销和证书验证. 作用:身份认证, ...

  3. 【实战-Linux】--搭建CA认证中心实现https取证

    环境 CA认证中心服务端:xuegod63.cn IP:192.168.1.63           客户端:xuegod64.cn IP:192.168.1.64 CA认证中心简述  CA :Cer ...

  4. 搭建CA认证中心及搭建https实战

    自建CA证书客户端及使用nginx搭建https 一.CA简单介绍CA,Catificate Authority,通俗的理解就是一种认证机制.它的作用就是提供证书(也就是服务端证书,由域名,公司信息, ...

  5. 加签,验签,CA认证中心流程

    概述: 本文主要是为了说明,三者在请求中的位置,以便于更好的理解三者的概念和作用. 信息安全三要素: 有效性(Availability):保证合法用户对信息和资源的使用不会被不正当地拒绝. 保密性(C ...

  6. CentOS 7 搭建CA认证中心

    搭建CA认证中心 配置一个自己的CA认证中心 [root@centos ~]# vim /etc/pki/tls/openssl.cnf +172 #直接定位到172行 basicConstraint ...

  7. APT攻击、加密方式

    目录 什么是APT? APT的攻击过程 防御APT 沙箱处理流程 对称加密算法 非对称加密算法 DH算法解决了再公开场合密钥安全传递问题 非对称加密解决身份认证问题 公钥身份认证 解决方法 CA认证- ...

  8. openSSL命令、PKI、CA、SSL证书原理

    相关学习资料 http://baike.baidu.com/view/7615.htm?fr=aladdin http://www.ibm.com/developerworks/cn/security ...

  9. centos 配置证书_如何在CentOS 8上设置和配置证书颁发机构(CA)

    centos 配置证书 介绍 (Introduction) A Certificate Authority (CA) is an entity responsible for issuing digi ...

最新文章

  1. 应届生失业率或继续上升?别怕,这份秋招指南请收好!
  2. 网站优化充满机遇和挑战
  3. Openlayers4中实现动态线效果
  4. 检索数据_12_从表中随机返回N条记录
  5. leetcode 229. Majority Element II(多数投票算法)
  6. @Repository , @Service , @Controller 和 @Component
  7. ubuntu运行c/c++语言
  8. wsimport生成客户端java代码
  9. matlab保存pdf图片太大,matlab中的图片保存方法精选.pdf
  10. editplus配置python_Editplus配置Python的开发环境
  11. Peer Pressure(博弈论+机制设计) 论文阅读笔记
  12. linux的ip是什么,Linux-IP地址后边加个/8(16,24,32)是什么意思?
  13. 《点满舔狗相关技能以后,不知为何就转码了》之YOLOP,YOLOPV2推理入门教学
  14. 网页前端上传文件,后端接受并处理文件
  15. python+windows画图工具--复现别人论文中的colormap 方法2
  16. 安徽农村信用社网银转账显示服务器无响应,农村信用社企业网银转账显示状态无效是怎么回事...
  17. html5中移动旋转缩放,HTML5 Canvas进阶(一):渐变,透明,移动,旋转,缩放
  18. 投资学U06 风险资产配置 习题笔记
  19. Redis学习7之Predis连接redis过程和测试
  20. 全国计算机二级java考试官网_全国计算机二级Java考试题库

热门文章

  1. 绪论--《可以量化的经济学》
  2. Errors accessing files.There may be spaces in your image‘s filename (已解决)
  3. B站手机APP缓存视频(m4s)转换为mp4格式
  4. 利用非约束性委派+Spooler打印机服务 制作黄金票据攻击域控
  5. Pta题目集:汽车加油问题 (20 分)
  6. verilog语言实现全加器
  7. vue 根据权限显示不同页面解决方案
  8. PCB设计技巧10大技巧
  9. 解决:严重: Compilation error org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException
  10. CSDN写作小技巧—— Markdown 语法排版