Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >密码学系列之:在线证书状态协议OCSP详解

密码学系列之:在线证书状态协议OCSP详解

原创
作者头像
程序那些事
发布于 2022-07-06 11:12:54
发布于 2022-07-06 11:12:54
4.5K02
代码可运行
举报
文章被收录于专栏:程序那些事程序那些事
运行总次数:2
代码可运行

简介

我们在进行网页访问的时候会跟各种各样的证书打交道,比如在访问https网页的时候,需要检测https网站的证书有效性。

OCSP就是一种校验协议,用于获取X.509数字证书的撤销状态。它是为了替换CRL而出现的。

本文将会详细介绍OCSP的实现和优点。

PKI中的CRL

我们知道在PKI架构中,CA证书是非常重要的组件,客户端通过CA证书来验证服务的可靠性。对于CA证书本身来说在创建的时候是可以指定过期时间的。这样证书在过期之后就不可以使用,需要申请新的证书。

但是只给证书指定过期时间是不够的,比如我们因为业务的需求,需要撤销证书怎么办呢?

PKI中提供了一个叫做CRL(certificate revocation list)的机制,用来维持被废除的证书列表。

这个CRL是由CA来颁发的,一般是在证书过期之前生成的。因为如果证书已经过期了,那么这个CRL是无意义的。

对于CRL本身来说,它是一个证书列表,里面证书的格式通常也使用的是X.509。

CRL一般是由发布证书的CA来维护和发布的,发布CRL的组件叫做CRL issuer,通常来说CRL issuer和CA是同一个服务,但是你也可以根据需要将CRL issuer和CA进行拆分。

CRL是由CA定时来发布的,当然你也可以按照需要在需要撤销某个CA证书的时候重新发布CRL。所有的CRL都有过期时间,在这个过期时间之内,客户端可以根据CRL中的签名,去CA验证CRL的有效性,从而防止CRL的伪造。

CRL的缺点

那么CRL有什么缺点呢?

首先CRL维持的是一个撤销的证书列表,为了保证系统的有效性,客户端在每次校验CA证书有效性的时候,都需要从CA服务器中获取这个CRL。然后通过CRL来校验对应的CA证书状态。

如果每次都去拿这个CRL,就有可能会有下面几个问题。

第一个问题是,如果CRL不可用,那么客户端就拿不到这个CRL,也就无法校验CA证书的状态,从而造成服务不可用。

另外一个问题是,如果要撤销的证书比较多的话,这个CRL可能会比较大,从而造成网络资源的浪费。

最后一个问题是PKI证书体系本身的目的是建立一个可以自我校验的,不依赖于在线服务的安全体系,如果每次都要在线获取CRL的话,就是去了PKI的这一优势。

CRL的状态

虽然CRL维持的是一个撤销证书列表,但是这个列表中证书的状态还是有所不同的。

CRL中证书的状态有两种,第一种就是证书已经被撤销了,比如证书的颁发机构CA发现之前的颁布的证书是错误的,或者因为其他的原因如私钥泄露导致原来的证书不够安全,需要将证书撤回。或者证书机构因为未遵守某些策略导致证书被吊销等,都需要将之前的证书设置为撤销状态。

还有一种状态是一个临时撤销的状态,这里叫做Hold状态,它表示证书暂时是无效的,比如在用户没有确定私钥是否丢失的情况下。当用户最终找回了私钥,则这个证书还是可以被恢复的。

OCSP的工作流程

既然CRL有这么多缺点,所以一个用来替代CRL的OCSP协议出现了。

我们先来看一下OCSP的工作流程。

假如A和B要进行使用PKI进行通讯。为了保证通讯的安全性,A将自己的公钥发给B,并告诉B,这是我的公钥,你可以用这个公钥来校验我发送给你的消息。

B在收到A的公钥之后,并不能确定A的公钥就是正确的,没有被篡改的。于是从A的公钥中提取出serial number,并将其封装到一个’OCSP request’中发给CA服务器。

CA服务器中的OCSP responder读取到了’OCSP request’请求,并从中提取出A的公钥的serial number。OCSP responder从CA服务器的数据库中查询这个serial number是否在这个数据库被撤销的列表中。

如果发现不在,那么意味着A的公钥仍然是有效的,OCSP responder将会发送一个签名后的OCSP response给B。

B通过使用CA服务器的公钥验证OCSP response的有效性,从而确认A的公钥仍然有效 。

最后B使用A的公钥和A进行通讯。

OCSP的优点

从上面的OCSP的工作流程我们可以大概总结出下面几个OCSP相对于CRL的优点。

首先OCSP响应的数据量要比CRL要小,所以对网络的要求和压力更少。

另外因为OCSP响应要解析的数据更少,所以OCSP客户端的实现要比CRL更加简单。

虽然因为CRL的各种缺点,在web环境中已经不再被使用,而是被更加高效的OCSP替换,但是CRL仍然被运行在CA的其他环境中。

OCSP协议的细节

OCSP协议是在RFC 6960中定义的。

OCSP协议可以分为请求协议和响应协议两部分,接下来分别来进行介绍。

OCSP请求

一个OCSP请求需要包含协议版本号,请求服务,要校验的证书identifier和可选的扩展部分。

OCSP responder在接收到OCSP的请求之后,会去校验OCSP消息的有效性,如果消息有问题则会返回异常,否则的话会根据请求的服务进行处理。

OCSP请求如果用ASN.1(Abstract Syntax Notation One)抽象语法标记这可以如下表示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   OCSPRequest     ::=     SEQUENCE {
       tbsRequest                  TBSRequest,
       optionalSignature   [0]     EXPLICIT Signature OPTIONAL }

   TBSRequest      ::=     SEQUENCE {
       version             [0]     EXPLICIT Version DEFAULT v1,
       requestorName       [1]     EXPLICIT GeneralName OPTIONAL,
       requestList                 SEQUENCE OF Request,
       requestExtensions   [2]     EXPLICIT Extensions OPTIONAL }
          Signature       ::=     SEQUENCE {
            signatureAlgorithm      AlgorithmIdentifier,
            signature               BIT STRING,
            certs               [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL}

   Version         ::=             INTEGER  {  v1(0) }

   Request         ::=     SEQUENCE {
       reqCert                     CertID,
       singleRequestExtensions     [0] EXPLICIT Extensions OPTIONAL }

   CertID          ::=     SEQUENCE {
       hashAlgorithm       AlgorithmIdentifier,
       issuerNameHash      OCTET STRING, -- Hash of issuer's DN
       issuerKeyHash       OCTET STRING, -- Hash of issuer's public key
       serialNumber        CertificateSerialNumber }

ASN.1是一个接口描述语言,通过ASN.1,我们可以很清晰的描述数据的格式信息。

一个OCSPRequest是由可选择签名的OCSP请求tbsRequest和对应的签名optionalSignature组成的。

其中TBSRequest中包含了版本号,OCSP requestor的名字,证书的状态列表requestList,可选的扩展数据这几项组成的。

OCSP响应

对于OCSP的响应来说,根据传输协议的不同它的结构也是不同的。但是所有的响应都应该包含responseStatus字段表示请求的处理状态。

OCSP响应用ASN.1格式来表示如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   OCSPResponse ::= SEQUENCE {
      responseStatus         OCSPResponseStatus,
      responseBytes          [0] EXPLICIT ResponseBytes OPTIONAL }

   OCSPResponseStatus ::= ENUMERATED {
       successful            (0),  -- Response has valid confirmations
       malformedRequest      (1),  -- Illegal confirmation request
       internalError         (2),  -- Internal error in issuer
       tryLater              (3),  -- Try again later
                                   -- (4) is not used
       sigRequired           (5),  -- Must sign the request
       unauthorized          (6)   -- Request unauthorized
   }

      ResponseBytes ::=       SEQUENCE {
       responseType   OBJECT IDENTIFIER,
       response       OCTET STRING }

responseStatus是响应的状态,responseBytes是可选的响应结果。

这里的response是一个BasicOCSPResponse对象的DER编码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   BasicOCSPResponse       ::= SEQUENCE {
      tbsResponseData      ResponseData,
      signatureAlgorithm   AlgorithmIdentifier,
      signature            BIT STRING,
      certs            [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL }

OCSP stapling

可以看到OCSP需要客户在需要查看证书是否被吊销的时候,需要向OCSP responser请求,以确认证书的有效性。

但是这种方式实际上泄露了用户的隐私信息,因为OCSP responser知道了客户端需要校验的证书,就知道客户端正在访问的网站。

于是引入了OCSP stapling来解决这个问题。

那么什么是OCSP stapling呢?

OCSP stapling是直接将OCSP证书放到客户端要访问的web服务器上,因为OCSP证书是添加了时间戳和数字签名的,所以可以保证其正确性。

这些OCSP证书会在客户端和web端建立SSL 握手的时候就包含在OCSP响应中。

这样客户端不需要单独和CA建立额外的连接,从而提高了性能。

OCSP stapling需要在服务器端主动开启。

如果你用的是apache服务器,首先需要版本大于2.3.3。

然后需要在.conf文件中的<VirtualHost></VirtualHost>block外部添加:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SSLStaplingCahe shmcb: /tmp/stapling_cache(128000)

然后在<VirtualHost></VirtualHost>block的内部添加:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SSLUseStapling On

如果你用的是nginx,首先需要版本大于1.3.7。

然后在nginx的配置文件server {}block中添加:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ssl_stapling on;
ssl_stapling_verify on;

如果你想验证一个网站是否开启了OCSP stapling,可以到https://entrust.ssllabs.com/网站中进行查询:

在这个网站中,你可以输入任何要查询的网站地址,然后可以得到下面的信息:

可以看到这个网站是开启了OCSP stapling的。

总结

OCSP和OCSP stapling是非常有用的证书撤销校验协议,已经被广泛的使用。大家可以检查一下自己的网站有没有用到哦。

更多内容请参考 http://www.flydean.com/43-pki-ocsp/ 最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
密码学系列之:PKI的证书格式表示X.509
在PKI(public key infrastructure)公钥设施基础体系中,所有的一切操作都是围绕着证书和密钥的,它提供了创建、管理、分发、使用、存储和撤销数字证书以及管理公钥加密所需的一组角色、策略、硬件、软件和程序。
程序那些事
2022/06/22
7750
密码学及公钥基础设施(PKI)入门
随着信息技术的迅猛发展,数据安全成为了我们日常生活和工作中不可忽视的部分。从保护个人隐私到保障电子支付的安全,再到确保国家间通信的机密性,密码学和公钥基础设施(PKI)在现代社会中扮演着至关重要的角色。本文将从密码学的基础概念入手,逐步介绍公钥基础设施(PKI)的原理、组成部分及其实际应用。
是山河呀
2025/01/26
1310
一个标准的x.509数字证书包括哪些内容?(数字证书的功能是)
将报文按双方约定的HASH算法计算得到一个固定位数的报文摘要。在数学上保证:只要改动报文中任何一位,重新计算出的报文摘要值就会与原先的值不相符。这样就保证了报文的不可更改性。
全栈程序员站长
2022/07/30
1.7K0
一个标准的x.509数字证书包括哪些内容?(数字证书的功能是)
密码学系列之:使用openssl检测网站是否支持ocsp
OCSP在线证书状态协议是为了替换CRL而提出来的。对于现代web服务器来说一般都是支持OCSP的,OCSP也是现代web服务器的标配。
程序那些事
2022/07/11
1.3K0
《透视HTTP协议》:快速了解HTTPS/HTTP2/HTTP3 的变动改进点
https被认为是通信安全的http,除了http多了s和默认端口改成了443之外,其他都是沿用的http(除了明文和不安全),最主要的改变就是http是over tcp,而https是 https over ssl over tcp。安全的特性都是ssl做的
小柔
2024/05/15
7180
《透视HTTP协议》:快速了解HTTPS/HTTP2/HTTP3 的变动改进点
OCSP请求/响应ASN.1编码注释
用户10799047
2023/10/19
4310
https原理及实践
转载请注明出处 安全知识 网络安全问题 数据机密性 在网络传输数据信息时,对数据的加密是至关重要的,否则所有传输的数据都是可以随时被第三方看到,完全没有机密性可言。 数据机密性解决问题思路 利用算法 为了保证数据的机密性,首先可以采用的方法就是将数据通过相应算法,转换为其它的数据信息,然后再通过相应算法反推出真正的数据是什么,这样一来就保证了数据在网络传输过程中安全性,不会被其它人轻易的看到传输过程中的数据信息。数据加密前的信息称为明文数据(plaintext),经过加密算法转换后进行传输的信息称为密文数据
863987322
2018/03/29
1.5K0
https原理及实践
你并不在意的 HTTPS 证书吊销机制,或许会给你造成灾难性安全问题!
偶刷《长安十二时辰》,午睡时,梦到我穿越到了唐朝,在长安城中的靖安司,做了一天的靖安司司丞。当徐宾遇害消失的时候我不在司内,当时的情形我不得而知。
iMike
2020/02/21
2.7K0
什么是X.509证书?X.509证书工作原理及应用?
X.509是公钥基础设施(PKI)的标准格式。X.509证书就是基于国际电信联盟(ITU)制定的X.509标准的数字证书。X.509证书主要用于识别互联网通信和计算机网络中的身份,保护数据传输安全。X.509证书无处不在,比如我们每天使用的网站、移动应用程序、电子文档以及连接的设备等都有它的身影。
Anita
2021/09/28
5.3K0
什么是X.509证书?X.509证书工作原理及应用?
抓包定位业务首次响应为什么需要等待几十秒
2.3.1.1 客户端越过负载均衡,直接访问服务器,客户端访问业务慢场景依然存在。
Hunter
2019/12/10
5.7K1
抓包定位业务首次响应为什么需要等待几十秒
个人博客网站页面优化,开启OCSP装订(OCSP Stapling)
在线证书状态协议(OCSP,Online Certificate Status Protocol)是维护服务器和其它网络资源安全性的两种普遍模式之一。另一种更老的方法是证书注销列表(CRL)已经被在线证书状态协议取代了很多年了。  
李洋博客
2022/09/30
1.3K0
个人博客网站页面优化,开启OCSP装订(OCSP Stapling)
写给开发人员的实用密码学 - 数字证书
在数字签名部分,我们讲到数字签名可以起到“防抵赖”的作用。然而,在开放的互联网环境中,通信的双方通常是互不相识,数字签名并不能解决身份认证的问题。比如在数字签名中,私钥签名,公钥验证签名。如果有人冒充淘宝给了你公钥,对方持有假冒公钥对应的私钥,这种情况下签名、验签都没问题,但你是在和一个假的淘宝通信。退一步说,你开始拿到的确实是淘宝发布的公钥,如果有人偷偷替换掉了你的机器上的公钥,这样你实际拥有的是李鬼的公钥,但是还以为这是淘宝的公钥。因此,李鬼就可以冒充淘宝,用自己的私钥做成"数字签名",写信给你,而你则使用假的公钥进行解密。
云水木石
2021/04/22
1.3K0
PKI信息安全知识点详细解答包含HTTPS
1. 什么是X.509? X.509标准是ITU-T设计的PKI标准,他是为了解决X.500目录中的身份鉴别和访问控制问题设计的。 2. 数字证书 数字证书的意义在于回答公钥属于谁的问题,以帮助用户安全地获得对方的公开密钥。证书中应对公钥和公钥私有者信息,并由可信任的CA签署,即CA对这些信息进行数字签名。一张数字证书由证书内容、签名算法和算法结果组成。 数字证书的结构如下: 版本号 version 序列号 serialNumber 签名算法 signature 有效日期 vaildity 主体 subje
Janti
2018/04/10
1.8K0
[信息安全] 05 X.509 公钥证书的格式标准
X.509是# 公钥证书的格式标准, 广泛用于TLS/SSL安全通信或者其他需要认证的环境中。X.509证书可以由# CA颁发,也可以自签名产生。
blackheart
2020/02/24
3.4K0
nginx优化https(ocsp)
当用户使用客户端或其他的设备访问https网站时,需要先验证https证书,验证方式有两种:
孤烟
2020/09/27
1.3K0
CDN开启OCSP Stapling功能为何不生效?
对于一个可信任的 CA 机构颁发的有效证书,在证书到期之前,只要 CA 没有将其吊销,那么这个证书就是有效可信任的。有时,由于某些特殊原因(比如私钥泄漏,证书信息有误,CA 有漏洞被黑客利用,颁发了其他域名的证书等等),需要吊销某些证书。那浏览器或者客户端如何知道当前使用的证书已经被吊销了呢,通常有两种方式:CRL(Certificate Revocation List,证书吊销列表)和 OCSP(Online Certificate Status Protocol,在线证书状态协议)
mengmye
2020/11/02
3.9K1
创建私有CA,我就用openSSL
一般情况下我们使用的证书都是由第三方权威机构来颁发的,如果我们有一个新的https网站,我们需要申请一个世界范围内都获得认可的证书,这样我们的网站才能被无障碍的访问。
程序那些事
2022/07/21
1.1K0
加密与安全_探索数字证书
数字证书是一种重要的安全标准,它集成了多种密码学算法,以确保数据的安全性、完整性和可信度。在数字化信息传输中,
小小工匠
2024/05/26
1710
加密与安全_探索数字证书
HTTPS你不要这么慢了
选择支持AES-NI特性的CPU,该CPU在指令级别优化了AES算法,加速了数据的加解密过程。
shysh95
2021/11/25
1.4K0
HTTPS你不要这么慢了
rfc 5280 X.509 PKI 解析
本文以博客园的证书为例讲解,不包含对CRL部分的翻译,如没有对第5章节以及6.3小节进行翻译
charlieroro
2020/03/24
2K0
rfc 5280 X.509 PKI 解析
相关推荐
密码学系列之:PKI的证书格式表示X.509
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验