zoukankan      html  css  js  c++  java
  • PKI相关知识简述

    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名称必须要保持一致,否则验证不通过,拒绝访问;因此,服务器证书中的主体名称必须与服务器名称保持一致;
    
  • 相关阅读:
    104.Maximum Depth of Binary Tree
    103.Binary Tree Zigzag Level Order Traversal
    102.Binary Tree Level Order Traversal
    101.Symmetric Tree
    100.Same Tree
    99.Recover Binary Search Tree
    98.Validate Binary Search Tree
    97.Interleaving String
    static静态初始化块
    serialVersionUID作用
  • 原文地址:https://www.cnblogs.com/jzbgltb/p/9967032.html
Copyright © 2011-2022 走看看