zoukankan      html  css  js  c++  java
  • 验证数字证书的有效性

    #此文来自于知乎的匿名用户

    要想验证证书是否有效,要检查三点:


    1. 验证证书是否在有效期内。

    证书中会包含证书的有效期的起始时间和结束时间,取一个时间点去比较就好了。

    关键问题是如何保证取到的时间点是可信的,这就是另外一个话题了。 

    2. 验证证书是否被吊销了。

    被吊销的证书是无效的。

    验证吊销有CRL和OCSP两种方法。

    CRL即证书吊销列表。证书被吊销后会被记录在CRL中,CA会定期发布CRL。应用程序可以依靠CRL来检查证书是否被吊销了。

    CRL有两个缺点,一是有可能会很大,下载很麻烦。针对这种情况有增量CRL这种方案。 二是有滞后性,就算证书被吊销了,应用也只能等到发布最新的CRL后才能知道。增量CRL也能解决一部分问题,但没有彻底解决。

    OCSP是在线证书状态检查协议。应用按照标准发送一个请求,对某张证书进行查询,之后服务器返回证书状态。OCSP可以认为是即时的(实际实现中可能会有一定延迟),所以没有CRL的缺点。不过对于一般的应用来说,实现OCSP还是有些难度的。


    3. 验证证书是否是上级CA签发的。

    每一张证书都是由上级CA证书签发的,上级CA证书可能还有上级,最后会找到根证书。根证书即自签证书,自己签自己。 当你验证一张证书是否是由上级CA证书签发的时候,你必须有这张上级CA证书。通常这张证书会内置在浏览器或者是操作系统中,有些场景下应用系统也会保留。

    --------- 以上三点,只要有一个没通过,这张证书就是无效的,不该信任。 在实际场景中会衍生出一些问题,

    比如: 1. 严格来说,证书状态验证“应该”是个“递归”过程:验证完一张证书之后还得验证上级CA证书,一直验到根。这个开销太巨大了,所以应用系统大多会做一些取舍。当然乱取舍的时候就有可能出问题。 2. 根证书的可信程度。根证书是整个信任体系的“根”,只有根证书可信,下级证书才可信。

  • 相关阅读:
    framework7学习笔记
    浮出层的css写法,完美兼容IE6~10
    SpringBoot2.x的c3p0- 0.9.1.2.jar:0.9.1.2]错误
    值溢出
    Jquery+AJAX实现滚动条下拉分页
    springboot+Mybatis多个数据源连接
    mysql批量替换字段中的字符或者字符串
    了解SpringCloud
    SpringBoot2.x访问不了application.properties文件中servlet.context-path上下文路径
    使用mavens创建SpringBoot和Mybatis的web项目
  • 原文地址:https://www.cnblogs.com/ronyjay/p/6269981.html
Copyright © 2011-2022 走看看