证书有效性验证、根证书

技术标签: 证书有效性验证、根证书

    一、   数字证书的有效性验证主要从三个方面:

      (1)数字证书有效期验证
      (2)根证书验证
      (3)CRL验证

  1、数字证书有效期验证
        就是说证书的使用时间要在起始时间和结束时间之内。通过解析证书很容易得到证书的有效期

  2、根证书验证
        先来理解一下什么是根证书?
        普通的证书一般包括三部分:用户信息,用户公钥,以及CA签名
        那么我们要验证这张证书就需要验证CA签名的真伪。那么就需要CA公钥。而CA公钥存在于另外一张证书(称这张证书是对普通证书签名的证书)中。因此我们又需要验证这另外一张证书的真伪。因此又需要验证另另外证书(称这张证书是对另外一张证书签名的证书)的真伪。依次往下回溯,就得到一条证书链。那么这张证书链从哪里结束呢?就是在根证书结束(即验证到根证书结束)。根证书是个很特别的证书,它是CA中心自己给自己签名的证书(即这张证书是用CA公钥对这张证书进行签名)。信任这张证书,就代表信任这张证书下的证书链。
        所有用户在使用自己的证书之前必须先下载根证书。
       所谓根证书验证就是:用根证书公钥来验证该证书的颁发者签名。所以首先必须要有根证书,并且根证书必须在受信任的证书 列表(即信任域)。

 3、CRL验证
       CRL是经过CA签名的证书作废列表,用于证书冻结和撤销。一般来说证书中有CRL地址,供HTTP或者LDAP方式访问,通过解析可得到CRL地址,然后下载CRL进行验证。
     并且证书中有CRL生效日期以及下次更新的日期,因此CRL是自动更新的,因此会有延迟性。
     于是呢,还有另外一种方式OSCP证书状态在线查询,可以即时的查询证书状态。
两种证书状态查询方式的比较:
 

二、https证书有效性验证引发的安全问题

        如果用户手机中安装了一个恶意证书,那么就可以通过中间人攻击的方式进行窃听用户通信以及修改request(请求)或者response(答复,响应)中的数据。

       手机银行中间人攻击过程:

     1 、客户端在启动时,传输数据之前需要客户端与服务端之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。

     2 、中间人在此过程中将客户端请求服务器的握手信息拦截后,模拟客户端请求给服务器(将自己支持的一套加密规则发送给服务器),服务器会从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给客户端。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。

     3 、而此时中间人会拦截下服务端返回给客户端的证书信息,并替换成自己的证书信息。

     4、 客户端得到中间人的response后,会选择以中间人的证书进行加密数据传输。

     5 、中间人在得到客户端的请求数据后,以自己的证书进行解密。

     6 、在经过窃听或者是修改请求数据后,再模拟客户端加密请求数据传给服务端。就此完成整个中间人攻击的过程。

     以fiddler工具模拟中间人攻击为例:

          1、 首先在手机中装入fiddler根证书:

                 导出fiddler的根证书;将fiddler根证书放入手机的SD卡中,然后在手机设置-安全中选择从SD卡中安装证书;成功安装fiddler根证书到手机上。

         2 、在PC端打开fiddler,将手机通信代理到PC端fiddler所监听的端口上(可以在wifi中的高级设置中设置代理),这样手机银行的所有通信均会被fiddler监听到。

        3 、启动手机银行客户端,会在fiddler中查看到所有请求的明文数据,并且可以进行修改后转发,成功将https加密绕过。

         防护办法:

       使用CA机构颁发证书的方式可行,但是如果与实际情况相结合来看的话,时间和成本太高,所以目前很少有用此办法来做。由于手机银行服务器其实是固定的,所以证书也是固定的,可以使用“证书或公钥锁定”的办法来防护证书有效性未作验证的问题。

        具体实现:

       1 公钥锁定

       将证书公钥写入客户端apk中,https通信时检查服务端传输时证书公钥与apk中是否一致。

       2 证书锁定:

         即为客户端颁发公钥证书存放在手机客户端中,在https通信时,在客户端代码中固定去取证书信息,不是从服务端中获取。

三、根证书

      1、定义

       根证书是指CA机构颁发SSL证书的核心,是信任链的起始点。根证书是浏览器是否对SSL证书每个浏览器都有一个根证书库,有的浏览器是采用自主的根证书库,而一些浏览器则采取第三方的根证书库。而根证书库是下载客户端浏览器时预先加载根证书的合集。因此根证书是十分重要的,因为它可确保浏览器自动信任已使用私钥签名的SSL证书。受信任的根证书是属于证书颁发机构(CA),而CA机构是验证和颁发SSL证书的组织机构。

      2、什么是证书链?

         浏览器是如何鉴定信任网站的SSL证书?其实当客户端访问服务器时,浏览器会查看SSL证书并执行快速验证SSL证书的真实性。

       浏览器鉴定SSL证书身份验证的操作是根据证书链的内容。那么证书链是什么?

       用户在获取SSL证书之前,首先要生成证书签名请求(CSR)和私钥。在最简单的迭代中,用户将生成的CSR发生到证书颁发机构,然后使用CA机构的根证书的私钥签署用户的SSL证书,并将SSL证书发回给用户。

       当浏览器检测到SSL证书时,就会查看证书是由其中一个受信任的根证书签名(使用root的私钥签名)。由于浏览器信任root,所以浏览器也信任根证书签名的任何证书。

       而证书链是由两个环节组成—信任锚(CA 证书)环节和已签名证书环节。信任锚证书CA 环节可以对中间证书签名;中间证书的所有者可以用自己的私钥对另一个证书签名。这两者结合就构成了证书链。

     3、什么是中间证书?

         证书颁发机构(CA)不会直接从根目录颁发服务器证书(即SSL证书),因为这种行为是十分危险的,因为一旦发生错误颁发或者需要撤销root,则使用root签名的每个证书都会被撤销信任。

         因此,为了避免这种风险发生,CA机构一般会引用中间根。CA机构使用其私钥对中间根进行签名,使浏览器信任中间根。然后CA机构使用中间根证书的私钥来签署用户申请的SSL证书。这种中间根的形式可以重复多次,即使用中间根签署另一个中间件,然后CA机构通过中间件签署SSL证书。

      这是证书链的可视化过程,从上述例子可看出,CA机构只需要使用一个中间体来保持简单的操作,但其实真正的证书链通常要复杂的多。

     4、数字签名有什么作用?

       当根证书以数字方式签署中间证书时,就会将部分信任转移到中间证书。因为签名是直接来源于收信人的根证书的私钥,因此它会自动受信任。

       当浏览器或其他客户端检测到服务端的SSL证书,就会收到证书本身或与证书相关联的公钥。然后通过公钥,解锁数字签名,查看是由哪家企业签署了证书。即当客户端浏览器访问网站时,会对服务器用户的SSL证书进行身份验证,通过公钥来解锁加密的签名,解锁的签名就会随着签署的证书,反馈到浏览器信任的根证书库中。

      如果解锁的签名链接是不在浏览器信任的根证书库中,浏览器就会对该证书显示不安全。

     5、根证书CA和中间根CA的区别?

       根证书CA是拥有一个或者多个受信任根的证书颁发机构,即CA机构已扎根在主要浏览器的信任库中。而中间根CA或子CA是颁发中间根的证书颁发机构,他们不一定在浏览器的信任库中有根证书,而是将他们的中间根链接回收到受信任的第三方根,这种就被称为交叉签名。

       所以有一些CA机构颁发的证书并不是直接从他们的根源发出的,而是通过中间根签署证书来加强安全层,这有助于减少发生错误或安全事件的机率。如果撤销中间根,而不是撤销根证书以及按扩展名签署的证书,这种做法会导致中间根签发的证书不受信任。

       其实目前就有一件经典的案例,就是谷歌和其他主流的浏览器都取消对赛门铁克品牌的SSL证书。据悉,赛门铁克的SSL证书目前已颁发了数百万,取消对其的信任似乎是一件艰巨的项目。但在实际中,这是一项非常简单的工作,因为只需要在浏览器的根证书库中删除Symantec CA的所有根就可以。

    6、链式根和单一根之间的区别?

       单一根是由CA拥有的,可直接颁发证书,可以让部署证书的操作步骤变得更加简单。而链式根是Sub CA用于颁发证书的内容,是一个中间证书,但是因为中间根CA没有自己受信任的证书,必须链接到第三方受信任的CA。

      区别具体如下:

       链式根需要比较复杂的安装方法,因为中间根需要加载到托管证书的每个服务器和应用程序。链式根需要受到链接的CA支配,因为他们无法控制root用户,一旦root CA停业,他们也会收到巨大的牵连。根证书和中间证书过期的话,中间根必须要在根证书之前,这样就会增加工作难度

      最后,以上所提到的证书颁发机构、证书链和加密签名的信任根证书,其实本质上都是PKI或者公钥基础结构。

参考:https://blog.csdn.net/baidu_36649389/article/details/53240579 

来源:网络


智能推荐

聚类有效性指标(CVI)

文章目录 1.定义: 2.聚类评估方法介绍 (一)内部评估 Davies-Bouldin index(戴维森堡丁指数,简称DB或DBI) Dunn's index(邓恩指数,简称DVI) Silhouette index(轮廓指数,简称SI) 参考 1.定义: 聚类有效性指标(Cluster Validity Index,CVI):用于度量聚类的效果。 详细介绍wiki:http://www.tu...

聚类有效性分析

概述 有ground-truth时 黄金标准(Gold Standard)作为Benchmark,是基于人工的判断制作而成。在有了这个Benchmark后,我们就可以定义出外部标准,通过簇和黄金标准之间类别的匹配的程度来评估聚类结果的好坏。 聚类质量四个外部标准: 1 纯度(Purity) 是一种简单而透明的评估手段; 2 标准化互信息(NMI, Normalized Mutual Informa...

有效性的QA审核检查单

经常有这么一个问题:QA为什么对过程改进有帮助。答案当然与如何理解、如何管理、如何处理QA与项目之间的关系密不可分。这里有很多议素我们需要好好探讨。其中一个比较实在一点的,就是如何让QA可以在审核之中,发现项目是否遵从标准规程之余,还能否发现可以提高项目效率的机会,并且提出有针对性地建议,让项目可以更有效地达成项目的目标。   QA审核的内容,通常都可以从审核的检查单之中看到一个端倪。如果检查单里...

AWS S3存储基于Hadoop之上的一致性保证

前言 Hadoop发展至今,它所涵盖的周边生态圈已经非常庞大了。但是作为一套目前看来如此成熟的系统,免不了要做一些兼容性的事情,比如一些第三方服务类型的系统。毕竟有些用户会使用到第三方的系统,但又不想去改变现有程序运行的模式以及学习第三方系统的成本。Hadoop作为一个如此成熟的项目,在兼容其它第三方系统上,肯定是有考虑到。今天,笔者就来讲讲目前Amazon S3服务与Hadoop的集成兼容性问题...

matlab支持向量机

关于支持向量机(SVM)的一个简单应用实例及matlab代码  (2014-04-23 10:32:35) 转载▼   分类: 信号处理 ********************************************************   ****************************************************...

猜你喜欢

HTTP2.0和HTTP1.X相比的新特性

1.新的二进制格式(Binary Format): HTTP1.x的解析是基于文本。(文本的表现形式有多样性,要考虑的场景很多才能做到健壮性) 基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。 2.HTTP2.0比HTTP1.0有路复用(MultiPlexing): 即连接共享,即每一个request都是是用作连接共享机制的。一个request对应一个id,这样一个连接上可...

概念的完整性

定义   概念的完整性,是指针对于一个领域,不仅了解该领域的所有对象,并且了解所有对象之间的关系。比如,小学数学中的四则运算。所有的对象就是指有理数,所有的关系就是由加减乘除四种运算而能够产生另外一个有理数。如果对这样的计算完全了解的话,那么使用这样的领域来解决问题就不成问题。   人月神话   概念的完整性在一本20年了还是非常深刻的软件工程书中被重点提出。这本书叫...

Docker ELK+Filebeat安装与配置 并用spring data elasticsearch连接 (遇到的问题服务器内存小太,elasticsearch太新)

Linux版本: Centos 7 Docker安装 yum install docker 启用服务 systemctl start docker systemctl enable docker   关于ELK ELK实际上是Elasticsearch+Logstash+Kibana的缩写,关于三个组件的详细介绍,请自己查看各大网站文章,这里就不再描述。 最近都在研究Docke...

如何看待云上的运维

俗话说干柴烈火一碰即着,运维加上云计算,也会起到这样的化学反应,尤其是游戏运维。游戏运维加上云计算,两者融合在一块儿,就犹如小说里面的干柴烈火掌威力大增,不仅提高了运维人员的工作效率,也对运维人员提出了更高的要求。 一个技术,一个平台,甚至是一个产业,从萌芽状态发展到成熟状态,它需要一个很漫长的过程,也可能几年、十几年。那么,云平台,带给我们高效率和便捷性的同时,大家也别忘了它现在还有一些不成熟性...

聊聊CVE漏洞编号和正式公开那些事

聊聊CVE漏洞编号和正式公开那些事 一 CVE漏洞编号是谁颁发的? CVE开始是由MITRE Corporation负责日常工作的。但是随着漏洞数量的增加,MITRE将漏洞编号的赋予工作转移到了其CNA(CVE Numbering Authorities)成员。CNA涵盖5类成员。目前共有69家成员单位。 1.MITRE:可为所有漏洞赋予CVE编号; 2.软件或设备厂商:如Apple、Check ...

问答精选

How is the workflow/ sequence of the JS: compare function to an array?

I know that's function: is fully working for sorting array contain number in ascending.. If the result is negative a is sorted before b. If the result is positive b is sorted before a. If the result i...

How to use javascript variable out of the scope?

I am using $.get functionality to get json data from action method. But out of $.get() function JavaScript variable getting default value. code look like: Output display look like: And then Display 0....

XMLSchema validation for StAX parser

In DOM or SAX parsers in Java it is possible to define the XML Schema to use by calling methods DocumentBuilderFactory.setSchema(..) or SAXParserFactory.setSchema(...). How can I do the similar thing ...

java.lang.NoSuchFieldError: IBM_JAVA for a simple hbase java client in Eclipse

As the title goes.My source code is: It seems that this error has nothing to do with hbase server because I can use hbase shell properly. But I really don't konw how to fix this problem.Both from my L...

Postgres: convert a list of "name=value" values into a table

Convert this string: using something like this (in Postgres 9.x): to get a result like this: PS: I can't create any function, so I need to use Postgres built in functions only. Thanks in advance. stri...

相关问题

相关文章

热门文章

推荐文章

相关标签

推荐问答