zoukankan      html  css  js  c++  java
  • Linux操作系统安全-证书的申请原理

                   Linux操作系统安全-证书的申请原理

                                              作者:尹正杰

    版权声明:原创作品,谢绝转载!否则将追究法律责任。

    一.APR的中间人攻击

      如下图所示,如果在client和server端有一个中间人攻击就比较麻烦了。
    
      比如典型的ARP攻击,MAN-IN-MIDDLE可以模拟client和server端的IP地址,当client像server端请求公钥时,MAN-IN-MIDDLE模拟server端,生成一个假公钥发给Client端,与此同时他会模拟client端向server端发送请求获取真的公钥。
    
      client端得到假的公钥后使用假的公钥对数据继续加密后发送给它以为的server,结果这个加密钥本来就是MAN-IN-MIDDLE生成的,因此自然是可以用自己的私钥去解开并获取到相应的数据。如果不是铭感信息可能MAN-IN-MINDDLE会原样模拟一份发送给server端,当涉及到铭感信息后,很可能被MAN-IN-MIDDLE加以利用。
    
      因此使用gpg方式加密相对来说是存在安全风险的。为了解决这个问题,就得引入了证书。

    二.证书的通信过程

    1>.如上图所示,存在四个角色

      Server:
        一般指的是提供web服务的服务器,为了数据安全会采用SSL/TLS方式加密数据,因此该服务器有自己的公钥和私钥。
      Client:
        一般指的是全地球网民,一般情况下用户电脑会安装浏览器,而浏览器内部已经封装好相应的RootCA的公钥啦。
      CA:
        一般指的的是签证机构,它们有权利颁发证书
      RootCA:
        即根CA机构,根CA机构要完成自签名的证书。

    2>.证书申请原理剖析

      CA机构向RootCA机构获取证书颁发权限:
        其实CA机构向RootCA机构获取授权证书颁发权限和咱们生活中的案例很像,比如:各个县区公安局需要向省/市公安局获取颁发身份证权限一样,一旦各个县区获取了颁发身份证的权限后,各县区就可以处理各自的镇,村,乡等居民的身份证办理,那样就不用全省的人都去同一个地方办理身份证,从而减少了压力。
        不过一般来说,CA机构可以颁发证书权限是有一个有效期的哟。

      Server端向CA机构发送证书请求:
        1>.首先为了网络上的数据安全性,通常我们会对数据进行加密操作,前面我们介绍了对称加密和非对称加密以及单项散列算法方式加密,在证书方面采用的是非对称加密,因此Server需要自己生成公钥和私钥;
        2>.Server端使用CA机构的公钥对Server端的公钥进行加密生成证书请求发送给CA机构;
        3>.CA机构收到Servcer端发送来的证书请求,会使用CA机构自己的私钥将证书请求解密,得到Server的公钥,将Server的公钥使用CA机构的私钥进行加密后,再连同CA机构信息(颁发者),证书有效期,签名算法等信息(一般采用的是X.509标准)一并发送给Server,信息也会再CA机构中记录,当然这个得需要企业付费哈;
        4>.由于Server已经向CA机构成功获取CA颁发的证书,而且在CA机构是有记录的,此时他就可以放心使用私钥对数据进行加密操作了;
        5>.Clients发送https请求给Server,等待Server的第一次响应;
        6>.Server收到Clients的请求后,通过权限验证后确认Clients有资格访问本地资源需要做出相应给相应的客户端,当需要发送数据时会用自己的私钥对数据进行加密操作并将证书一起发送给Client的浏览器;
        7>.Clients收到Server的响应信息后,首先判断响应信息的证书有效性,此时由于Clients的浏览器中有相应的RootCA的公钥,自然可以查阅到RootCA所颁发的证书机构,发现Server发来的证书认证机构的确在RootCA所颁发的CA机构记录中,那么就说明Server是被RootCA所信任的,于是就用Server的公钥对数据进行解密。

    三.CA和证书

    1>.PKI(全称Public Key Infrastructure)

    签证机构:
      CA(Certificate Authority),可以颁发证书的机构 注册机构:
      RA,注册机构是无权限颁发证书的(就好像我们当地的派出所是没有权限颁身份证的,但是当地派出所可以收集当地居民信息,即当地居民可以在当地派出所进行注册,再由当地派出所向县区里提交信息,颁发身份证的一般由县或者区来颁发) 证书吊销列表:
      CRL,一个存放被吊销证书的列表 证书存取库:
      即存放证书的列表

    2>.X.509(定义了证书的结构以及认证协议标准)

      版本号
      序列号
      签名算法
      颁发者
      有效期限
      主体名称
      主体公钥
      CRL分发点
      扩展信息
      发行者签名

     

    四.证书获取

    1>.证书类型

      证书授权机构的证书:
        CA机构自己的证书。   服务器:
        给某个网站服务器的证书,以cnblog为例,他们购买的就泛域名,价格上来说要比直接购买www.cnblogs.com要贵得多。   用户证书:
        证明用户的身份,经常用于邮件。

    2>.获取证书的两种方法

      使用证书授权机构
        生成证书请求(csr)
        将证书请求csr发送给CA
        CA签名颁发证书
    
      自签名的证书
        自已签发自己的公钥

    五.安全协议

    SSL:Secure Socket Layer,TLS: Transport Layer Security
      1995:
        SSL 2.0 Netscape(该浏览器是付费的,这也就是后来为什么IE,Googel浏览器相继横空出世的一个重要因素吧,这个360公司开发的免费的杀毒软件一样,直接让一些传统的杀毒软件公司黄掉了)   1996:
        SSL 3.0   1999:
        TLS 1.0   2006:
        TLS 1.1 IETF(Internet工程任务组) RFC 4346   2008:
        TLS 1.2 当前主流使用   2015:
        TLS 1.3   
    功能:
      机密性:
        对数据进行加密。
      认证:
        验证身份。
      完整性:
        数据在传输过程中没有被破坏。
      重放保护:
        数据在发送中不允许重新发送,什么是重新发送?举个例子,A和B在通信过程中,若A往B发送数据请求登录验证,正常情况下会使用B的公钥对数据进行加密,并发送给B。若A的数据发送给B之前,被C来拦截下来了,由于数据已经被A使用B的公钥加密过了,因此C是破解不了数据的。但是C如果能将这个数据的IP头部信息修改成自己的IP地址并重新发送给B,那么C就间接实现了登录操作,测试A用户还一脸懵逼中。
    两阶段协议,分为握手阶段和应用阶段   握手阶段(协商阶段):
        客户端和服务器端认证对方身份(依赖于PKI体系,利用数字证书进行身份认证),并协商通信中使用的安全参数、密码套件以及主密钥。后续通信使用的所有密钥都是通过MasterSecret生成。   应用阶段:
        在握手阶段完成后进入,在应用阶段通信双方使用握手阶段协商好的密钥进行安全通信

    如上图所示,SSL/TLS有很多协议(我们也可以说是SSL/TLS协议栈),以下是简要介绍:
      Handshake协议:
        包括协商安全参数和密码套件、服务器身份认证(客户端身份认证可选)、密钥交换   ChangeCipherSpec 协议:
        一条消息表明握手协议已经完成   Alert 协议:
        对握手协议中一些异常的错误提醒,分为fatal和warning两个级别,fatal类型错误会直接中断SSL链接,而warning级别的错误SSL链接仍可继续,只是会给出错误警告   Record 协议:
        包括对消息的分段、压缩、消息认证和完整性保护、加密等   HTTPS 协议:
        就是"HTTP 协议"和"SSL/TLS 协议"的组合。"HTTP over SSL”或"HTTP over TLS",对http协议的文本数据进行加密处理后,成为二进制形式传输。HTTPS协议结构如下图所示。

     

    六.HTTPS工作过程

      

    https 实现过程如下:
      1>.客户端发起HTTPS请求:
        客户端访问某个web端的https地址,一般都是443端口
      2>.服务端的配置:
        采用https协议的服务器必须要有一套证书,可以通过一些组织申请,也可以自己制作,目前国内很多网站都自己做的,当你访问一个网站的时候提示证书不可信任就表示证书是自己做的,证书就是一个公钥和私钥匙,就像一把锁和钥匙,正常情况下只有你的钥匙可以打开你的锁,你可以把这个送给别人让他锁住一个箱子,里面放满了钱或秘密,别人不知道里面放了什么而且别人也打不开,只有你的钥匙是可以打开的。
      3>.传送证书:
        服务端给客户端传递证书,其实就是公钥,里面包含了很多信息,例如证书得到颁发机构、过期时间等等。
      4>.客户端解析证书:
        这部分工作是有客户端完成的,首先会验证公钥的有效性,比如颁发机构、过期时间等等,如果发现异常则会弹出一个警告框提示证书可能存在问题,如果证书没有问题就生成一个随机值,然后用证书对该随机值进行加密,就像2步骤所说把随机值锁起来,不让别人看到。
      5>.传送4步骤的加密数据:
        就是将用证书加密后的随机值传递给服务器,目的就是为了让服务器得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值进行加密解密了。
      6>.服务端解密信息:
        服务端用私钥解密5步骤加密后的随机值之后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密,对称加密就是将信息和私钥通过算法混合在一起,这样除非你知道私钥,不然是无法获取其内部的内容,而正好客户端和服务端都知道这个私钥,所以只要机密算法够复杂就可以保证数据的安全性。
      7>.传输加密后的信息:
        服务端将用私钥加密后的数据传递给客户端,在客户端可以被还原出原数据内容。
      8>.客户端解密信息:
        客户端用之前生成的私钥获解密服务端传递过来的数据,由于数据一直是加密的,因此即使第三方获取到数据也无法知道其详细内容。
  • 相关阅读:
    Java 单测 回滚
    Java四种线程池的使用
    git gc
    Git 常用命令
    JPA 批量新增
    SpringData JPA 排除 扫描 exclude-filter 不能使用解决
    开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别
    深入浅出 RPC
    阿里 Java面试 知识点
    Eclipse Egit 安装
  • 原文地址:https://www.cnblogs.com/yinzhengjie/p/12071167.html
Copyright © 2011-2022 走看看