1. 公钥泄露导致中间人攻击

有A、B、C三个人,如果C把自己的公钥提供给了AB双方,C伪装成B,让A认为C就B,这样A就把自己的公钥发送给C,C再伪装成A,让B认为C就A,B就把自己的公钥也发送给了C;这样AB双方的每次通信,都是经过中间的C看过一遍了,这叫做中间人攻击;因为AB双方无法相互确认对方的身份;

中间人攻击是因为公钥获取环节出了问题,为了解决这一问题,就诞生了CA,通过CA实现可靠的获取对方的公钥;

2. 什么是CA

CA就是双方都认可的第三方可信机构;

A把自己的公钥提请给CA,由CA对这个公钥做一些特殊防伪技术处理后即称为证书,再发给A;以后任何人与A通信,A就把着这个经过CA加工过的公钥发给对方;

如B向A要公钥时,A就把证书(公钥)发给B,B收到后,会对证书进行验证(B本地要事先有CA的公钥),如果验证通过则代表对方是A;

证书里包括了拥有者的公钥,还包括拥有者各种信息;此时C要想冒充伪装成A或B,则不能成功,所以说找到信任的CA是重要的;

3. 如何验证CA

证书中包括:拥有者名称、公钥、证书有效期,最重要的是CA会用自己的私钥加密这个证书的特征码,形成数字签名;放在证书最后;

收到证书之后的检验流程:

  1. 检查证书的签发者CA;
  2. 使用CA的公钥解密CA的签名,得出特征码;如果能解密则说明证书的来源可靠;
  3. 使用同样的算法计算出CA的特征码,和解压出来的特征码对比,如果一致表示证书的完整性可靠;
  4. 检查证书有效期;
  5. 验证主体名称是否为对方的名称;
  6. 检查证书是否被吊销;
  7. 查看证书是否过期;

4. 如何可靠地获取CA

CA为了让别人能验证它所发的证书是CA所发的,所以CA把自己的公钥提请给每一个信任它的人;为了使得整个法则是完整的,所以CA就先给自己签发一个证书(包括CA的信息和CA的公钥);因此,只有拿到CA的证书才能获得CA的公钥,才能解密CA的签名,才能验证CA发给它人的证书;

因为数据在网络传输的过程中存在风险,所以只有当面交易CA的证书才可靠;

CA在全球有很多从属关系,是有信任关系可传递的;有根CA,下面有很多派出CA信任关系可传递;

CA的证书通过非常可靠的手段给了微软,微软在操作系统上直接安装了证书;而在linux系统没有内置证书,只能手动获得;

CA是让通信双方能够可靠的获取到对方公钥的一种基础保证机制;如果有人私钥丢失,可以向CA申请吊销证书作废;

5. PKI:Public Key Infrastructure

公钥基础设施:包括四部分

签证机构:CA

注册机构:RA

证书吊销列表:CRL

证书存储库:CR

5. SSL和TLS

SSL是网警公司发布的,属于私有协议;TLS是IETF发布的,属于公有协议;SSL和TLS一般统称为SSL协议;有多种程序可以实现这两种协议,其中OpenSSL是著名的开源实现;

6. SSL Handshake

第一阶段:ClientHello:

  1. 支持的协议版本,比如TLS 1.2;
  2. 客户端生成一个随机数,稍后用于生成“会话密钥”
  3. 支持的加密算法,比如对称加密算法AES、3DES、非对称加密算法RSA;
  4. 支持的压缩算法;

第二阶段:ServerHello

  1. 确认加密通信协议版本,比如TLS 1.2;
  2. 服务器端生成一个随机数,稍后用于生成“会话密钥”
  3. 确认使用的加密方法;
  4. 发送服务器证书;
  5. 索要客户端证书(如果还要确认客户端身份,就要求客户端发送证书,一般服务器端都不验证);

第三阶段:

  1. 验证服务器证书,在确认无误后使用信任CA的公钥解密数字证书获得Server的公钥;
  2. 发送以下信息给服务器端:

    (1). 生成一个新的46字节随机数:(称为预备主密钥Pre-master secret),使用Server的公钥加密预备主密钥发给Server。

    (2). 编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送;

    (3). 客户端握手结束通知;

第四阶段:

  1. 收到客户端发来的Pre-master secret后,客户端和服务器都具有了(客户端随机数+服务端随机数+预备主密钥),它们两者都根据约定的加密方法,使用这三个随机数生成对称密钥——主密钥(也称为对话密钥session key),用来加密接下来的整个对话过程。计算生成本次会话所有到的“会话密钥”;
  2. 向客户端发送如下信息:

    (1). 编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送;

    (2). 服务端握手结束通知;

注意:

服务器和客户端通信,服务器把数字证书发给客户端,最关键的一点是客户端要保证证书的有效性,通过查看证书状态并去CA的吊销列表查看服务器的证书是否被吊销。只有服务器的证书可用了,才保证了第一环节的安全性。

可以看出,使用SSL比前文介绍的“数字签名+加密”简便多了,将身份验证和密钥生成在会话的开始就完成了,而不需要每次的数据传输过程中都进行,这就是https等使用ssl加密机制的握手通信过程。

例如:访问的是https://www.taobao.com服务器,那客户端收到的服务器发来的证书中的主体名称要与服访问的www.taobao.com名称必须要保持一致,否则验证不通过,拒绝访问;因此,服务器证书中的主体名称必须与服务器名称保持一致;

PKI相关知识简述的更多相关文章

  1. 加密解密(7)*PKI基础知识(完整)

    PKI 基础知识 摘要 本白皮书介绍了加密和公钥基本结构(PKI)的概念和使用 Microsoft Windows 2000 Server 操作系统中的证书服务的基础知识.如果您还不熟悉加密和公钥技术 ...

  2. 微信小程序必知相关知识

    微信小程序必知相关知识 1 请谈谈微信小程序主要目录和文件的作用? project.config.json 项目配置文件,用得最多的就是配置是否开启https校验: App.js 设置一些全局的基础数 ...

  3. 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸

    类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...

  4. 移动WEB像素相关知识

    了解移动web像素的知识,主要是为了切图时心中有数.本文主要围绕一个问题:怎样根据设备厂商提供的屏幕尺寸和物理像素得到我们切图需要的逻辑像素?围绕这个问题以iphone5为例讲解涉及到的web像素相关 ...

  5. listener监听器的相关知识

    从别人的博客上我学习了listener的相关知识现在分享给大家 1.概念: 监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上 ...

  6. UIViewController相关知识

    title: UIViewController 相关知识date: 2015-12-13 11:50categories: IOS tags: UIViewController 小小程序猿我的博客:h ...

  7. 【转】java NIO 相关知识

    原文地址:http://www.iteye.com/magazines/132-Java-NIO Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的 ...

  8. NSString使用stringWithFormat拼接的相关知识

    NSString使用stringWithFormat拼接的相关知识 保留2位小数点 1 2 3 4 //.2代表小数点后面保留2位(2代表保留的数量) NSString *string = [NSSt ...

  9. iOS网络相关知识总结

    iOS网络相关知识总结 1.关于请求NSURLRequest? 我们经常讲的GET/POST/PUT等请求是指我们要向服务器发出的NSMutableURLRequest的类型; 我们可以设置Reque ...

随机推荐

  1. ADT20 混淆编译

    注意:一定要 android代码混淆,整了两天怎么也弄不去来,百度翻遍了也都是怎么配置cfg文件,怎么混淆成功的喜悦,我就气死了,怎么都不成功.真是气死了,不过功夫不负有心人,终究还是弄出来了. 不能 ...

  2. 别再问什么是Java内存模型了,看这里!

    网上有很多关于Java内存模型的文章,在<深入理解Java虚拟机>和<Java并发编程的艺术>等书中也都有关于这个知识点的介绍.但是,很多人读完之后还是搞不清楚,甚至有的人说自 ...

  3. 手推FP-growth (频繁模式增长)算法------挖掘频繁项集

    一.频繁项集挖掘为什么会出现FP-growth呢? 原因:这得从Apriori算法的原理说起,Apriori会产生大量候选项集(就是连接后产生的),在剪枝时,需要扫描整个数据库(就是给出的数据),通过 ...

  4. 揭秘Node.js深受欢迎的原因

    揭秘Node.js深受欢迎的原因 http://www.php100.com/html/dujia/2014/1127/7922.html

  5. Linux 下編輯 PDF 檔的工具(PDF editor under Linux)(转载)

    转自:http://www.gtwang.org/2011/05/linux-pdf.html PDF 檔雖然是一個跨平台的檔案格式,但 Adobe 只有提供免費的 Adobe Reader,要看 P ...

  6. npm更换为淘宝镜像源

    1.通过config命令   1 2 npm config set registry http://registry.cnpmjs.org npm info underscore (如果上面配置正确这 ...

  7. Troubleshooting Guide for ORA-12541 TNS: No Listener

    Server side checks (not platform specific): 1)  Check the result on the server using tnsping to the ...

  8. poj1240 Pre-Post-erous!

    思路: 根据前序序列和后序序列递归构造m叉树,确定每个节点的子节点数量.再用组合数公式累乘. 实现: #include <iostream> using namespace std; ][ ...

  9. XAMPP--Apache服务无法启动问题定位及处理

    一.问题简述: XAMPP 在使用一段时间后,Apache服务无法启动. 二.详细描述: 安装Xampp服务器套件之后,部署使用正常.一段时间未使用,再次打开时,Apache服务无法启动.错误提示如下 ...

  10. JBoss4.2的启动方式-Jboss无法通过IP地址访问,只能用localhost访问

    JBOSS版本:4.2.3GA症状:服务器无法通过IP地址去访问,只能用127.0.0.1或者localhost来访问. 开始怀疑是端口没有放开,用telnet ip 80 也不能连接,就一直怀疑端口 ...