Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >密码学系列之:使用openssl检测网站是否支持ocsp

密码学系列之:使用openssl检测网站是否支持ocsp

原创
作者头像
程序那些事
发布于 2022-07-11 05:54:23
发布于 2022-07-11 05:54:23
1.3K00
代码可运行
举报
文章被收录于专栏:程序那些事程序那些事
运行总次数:0
代码可运行

简介

OCSP在线证书状态协议是为了替换CRL而提出来的。对于现代web服务器来说一般都是支持OCSP的,OCSP也是现代web服务器的标配。

但是OCSP stapling却不是所有的web服务器都支持。但是现实工作中我们可能需要知道具体某个网站对OCSP的支持程度。

支持OCSP stapling的网站

怎么判断一个web站点是否支持OCSP stapling呢?

最简单的方法就是去第三方网站查看网站的证书信息。比如我们之前提到过的entrust.ssllabs.com,通过输入对应的网站信息,在 Protocol Details一节中,可以找到网站是否支持OCSP stapling的具体信息,如下所示:

可以看到这个网站是开启了OCSP stapling的。但是事实上这个世界上的绝大部分网站是没有开启OCSP stapling的。

那么除了在第三方网站上查看OCSP stapling之外,还有没有其他办法呢?

事实上我们可以使用openssl神器轻松的做到这一点。当然前提是这个网站支持https。

接下来我们会详细讲解从获取服务器的证书到验证服务器是否支持OCSP stapling的一整套流程。

本文要验证的网站是微软的官网www.squarespace.com,这是一个支持OCSP stapling的网站。

获取服务器的证书

要校验服务器是否支持OSCP,我们首先需要获取到这个服务器的证书,可以用openssl提供的 openssl s_client -connect来完成这个工作。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 openssl s_client -connect www.squarespace.com:443

这个命令会输出建立连接的所有内容,其中包含了要访问网站的证书信息。

因为我们只需要网站的证书,所以需要把-----BEGIN CERTIFICATE----------END CERTIFICATE-----之间的内容保存即可。

那么最终的命令如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  openssl s_client -connect www.squarespace.com:443 | sed -n '/-----BEGIN/,/-----END/p' > ca.pem

这里我们使用一个sed -n命令从输出中截取以-----BEGIN开头和以-----END结尾的数据。

最终我们得到了网站的证书。

除了网站本身的证书之外,网站的证书本身是由其他的证书来签发的,这些证书叫做intermediate certificate,我们需要获取到整个证书链。

同样使用openssl的openssl s_client -showcerts命令可以获取所有的证书链:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
openssl s_client -showcerts  -connect www.squarespace.com:443 | sed -n '/-----BEGIN/,/-----END/p' > chain.pem

如果你打开chain.pem文件可以发现,文件里面有两个证书,最上面的一个就是服务器本身的证书,而第二个就是用于签名服务器证书的intermediate certificate。

获取OCSP responder地址

如果证书中包含有OCSP responder的地址,那么可以用下面的命令来获取:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
openssl x509 -noout -ocsp_uri -in ca.pem 

我们可以得到网站的ocsp responder地址是:http://ocsp.digicert.com

还有一种方法可以获得ocsp responder的地址:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
openssl x509 -text -noout -in ca.pem

这个命令会输出证书的所有信息,我们可以看到下面的内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 Authority Information Access:
                OCSP - URI:http://ocsp.digicert.com
                CA Issuers - URI:http://cacerts.digicert.com/DigiCertTLSRSASHA2562020CA1-1.crt

其中OCSP – URI就是OCSP responder的地址。

发送OCSP请求

有了OCSP responder的地址,我们就可以进行OCSP验证,在这个命令中我们需要用到服务器的证书和intermediate证书。

具体的请求命令如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
openssl ocsp -issuer chain.pem -cert ca.pem -text -url http://ocsp.digicert.com

从输出中我们可以得到两部分,第一部分是OCSP Request Data,也就是OCSP请求数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
OCSP Request Data:
    Version: 1 (0x0)
    Requestor List:
        Certificate ID:
          Hash Algorithm: sha1
          Issuer Name Hash: 521EE36C478119A9CB03FAB74E57E1197AF1818B
          Issuer Key Hash: 09262CA9DCFF639140E75867E2083F74F6EAF165
          Serial Number: 120014F1EC2395D56FDCC4DCB700000014F1EC
    Request Extensions:
        OCSP Nonce:
            04102873CFC7831AB971F3FDFBFCF3953EC5

从请求数据中,我们可以看到详细的OCSP请求数据结构,包括issuer的内容和OCSP nonce。

第二部分是响应数据,很遗憾我们得到了下面的请求错误响应数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
OCSP Response Data:
    OCSP Response Status: successful (0x0)
    Response Type: Basic OCSP Response
    Version: 1 (0x0)
    Responder Id: B76BA2EAA8AA848C79EAB4DA0F98B2C59576B9F4
    Produced At: Apr 30 04:36:26 2022 GMT
    Responses:
    Certificate ID:
      Hash Algorithm: sha1
      Issuer Name Hash: E4E395A229D3D4C1C31FF0980C0B4EC0098AABD8
      Issuer Key Hash: B76BA2EAA8AA848C79EAB4DA0F98B2C59576B9F4
      Serial Number: 0F21C13200AE502D52BBE8DFEAB0F807
    Cert Status: good
    This Update: Apr 30 04:21:01 2022 GMT
    Next Update: May  7 03:36:01 2022 GMT

上面返回结果中,Cert Status: good表示的是OCSP请求成功了,这个网站是一个支持OCSP协议的网站。

后面的两行是OCSP上次更新的时间和下次更新的时间:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    This Update: Apr 30 04:21:01 2022 GMT
    Next Update: May  7 03:36:01 2022 GMT

说明这个网站还支持OCSP stapling。

另外,请求某些网站的OCSP url的时候可能会得到下面的异常:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Error querying OCSP responder
4346349100:error:27FFF072:OCSP routines:CRYPTO_internal:server response error:/AppleInternal/Library/BuildRoots/66382bca-8bca-11ec-aade-6613bcf0e2ee/Library/Caches/com.apple.xbs/Sources/libressl/libressl-2.8/crypto/ocsp/ocsp_ht.c:251:Code=400,Reason=Bad Request

为什么会这样呢?

这是因为ocsp.msocsp.com这个网站不支持OCSP默认的HTTP 1.0请求,在HTTP 1.0请求中默认是没有Host这个请求头的。所以我们需要添加上Host请求头,然后再执行一次即可。

一个更加简单的方法

以上我们实际上是将请求拆开来一步步执行的。我们还可以使用openssl一步执行任务如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
openssl s_client -tlsextdebug -status -connect www.squarespace.com:443

从输出中,我们可以看到下面的数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
OCSP response:
======================================
OCSP Response Data:
    OCSP Response Status: successful (0x0)
    Response Type: Basic OCSP Response
    Version: 1 (0x0)
    Responder Id: B76BA2EAA8AA848C79EAB4DA0F98B2C59576B9F4
    Produced At: Apr 27 04:36:26 2022 GMT
    Responses:
    Certificate ID:
      Hash Algorithm: sha1
      Issuer Name Hash: E4E395A229D3D4C1C31FF0980C0B4EC0098AABD8
      Issuer Key Hash: B76BA2EAA8AA848C79EAB4DA0F98B2C59576B9F4
      Serial Number: 0F21C13200AE502D52BBE8DFEAB0F807
    Cert Status: good
    This Update: Apr 27 04:21:02 2022 GMT
    Next Update: May  4 03:36:02 2022 GMT

上面的命令直接输出了OCSP response结果,从结果中我们很清楚的看到该网站是否支持OCSP和OCSP stapling。

总结

虽然大多数网站都不支持OCSP stapling,但是我们可以通过使用上面的命令来有效的进行判断。

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

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用openssl生成证书_怎样验证普通话证书的真假
大家好,又见面了,我是你们的朋友全栈君。 翻译:https://raymii.org/s/articles/OpenSSL_Manually_Verify_a_certificate_again
全栈程序员站长
2022/09/20
8770
使用openssl生成证书_怎样验证普通话证书的真假
密码学系列之:在线证书状态协议OCSP详解
我们在进行网页访问的时候会跟各种各样的证书打交道,比如在访问https网页的时候,需要检测https网站的证书有效性。
程序那些事
2022/07/06
4.5K0
Nginx开启OCSP stapling解决网站在某些设备访问缓慢问题
如果命令执行后返回OCSP Response Status: successful (0x0)表示成功,返回OCSP response: no response sent表示失败。
零云
2023/07/24
5260
密码学系列之:PKI的证书格式表示X.509
在PKI(public key infrastructure)公钥设施基础体系中,所有的一切操作都是围绕着证书和密钥的,它提供了创建、管理、分发、使用、存储和撤销数字证书以及管理公钥加密所需的一组角色、策略、硬件、软件和程序。
程序那些事
2022/06/22
7750
创建私有CA,我就用openSSL
一般情况下我们使用的证书都是由第三方权威机构来颁发的,如果我们有一个新的https网站,我们需要申请一个世界范围内都获得认可的证书,这样我们的网站才能被无障碍的访问。
程序那些事
2022/07/21
1.1K0
在终端使用脚本查看网站 SSL 证书信息
之前遇到过一次赛门铁克很久的证书被Chrome弃用的问题,涉及到了查看证书。当然第一个大家会想到的是在浏览器中查看,但是总是感觉不够极客。后来摸索找到了终端查看网站证书的方法
技术小黑屋
2020/01/21
2.2K0
有关 TLS/SSL 证书的一切
TLS 握手其中关键的一步,就是 Server 端要向 Client 端证明自己的身份。感觉有关 TLS 的内容,介绍握手的原理的有很多,但是介绍证书的并不多,证书是 TLS/SSL 非常关键的一环。本文就尝试说明,证书是用来干什么的,Google 是如何防止别人冒充 Google 的,证书为什么会频繁出问题,等等。
公众号: 云原生生态圈
2024/05/06
1.1K0
有关 TLS/SSL 证书的一切
利用httpd+OpenSSL来实现网站的https
                                        CA验证中心(颁发/吊销证书)                                         /                \ \                                  CA 证书    /            下发  \ \ 证书请求                                         /            证书  \ \                                   client <--------数字证书------ WEB
星哥玩云
2022/06/30
2410
利用httpd+openssl来实现网站的https
                                        CA验证中心(颁发/吊销证书)                                         /                 \ \                                  CA 证书    /             下发   \ \ 证书请求                                          /             证书   \ \                                    client <--------数字证书------ WEB 1。web服务器,生成非对称加密密钥对(web公钥,web私钥) 2。web服务器使用 web身份信息+web公钥 生成 web服务器的证书请求 ,并将证书请求发给CA服务器 3。CA服务器使用 CA的私钥 对 web 服务器的证书请求 进行数字签名得到 web服务器的数字证书,并将web服务器的数字证书颁发给web服务器。 4。client访问web服务器,请求https连接,下载web数字证书 5。client下载 CA数字证书(CA身份信息+CA公钥,由上一级CA颁发,也可自签名颁发),验证 web数字证书(CA数字证书中有CA公钥,web数字证书是使用CA私钥签名的) 6。client与web协商对称加密算法,client生成对称加密密钥并使用web公钥加密,发送给web服务器,web服务器使用web私钥解密 7。使用对称加密密钥传输数据,并校验数据的完整性 利用httpd+openssl来实现网站的https
DevinGeng
2019/04/09
4490
Nginx开启OCSP以解决Let's Encrypt证书被DNS污染访问缓慢
最近突然发现我的网站在苹果手机上Safari浏览器上第一次会访问会非常慢,但只要第一次访问后,后续的访问速度均不受影响...这就纳闷了,网站速度我都是优化过的,为什么会存在这种情况呢?困扰我许久,因为只有手机访问才这样,在电脑上访问速度都很快,完全没有头绪。
Balliol Chen
2022/04/23
2.6K0
nginx优化https(ocsp)
当用户使用客户端或其他的设备访问https网站时,需要先验证https证书,验证方式有两种:
孤烟
2020/09/27
1.3K0
Let's Encrypt 被DNS污染导致苹果手机访问速度慢,Nginx 可以开启 OCSP 解决
最近突然发现我的网站在苹果手机上Safari浏览器上第一次会访问会非常慢,但只要第一次访问后,后续的访问速度均不受影响...这就纳闷了,网站速度我都是优化过的,为什么会存在这种情况呢?困扰我许久,因为只有手机访问才这样,在电脑上访问速度都很快,完全没有头绪...
Yangsh888
2022/03/28
2.8K0
网站 HTTPS 优化
Nginx 常作为最常见的服务器,常被用作负载均衡 (Load Balancer)、反向代理 (Reverse Proxy),以及网关 (Gateway) 等等。一个配置得当的 Nginx 服务器单机应该可以期望承受住 50K 到 80K 左右每秒的请求,同时将 CPU 负载在可控范围内。
张琳兮
2021/01/26
8820
使用OpenSSL创建CA和申请证书
OpenSSL是一种加密工具套件,可实现安全套接字层(SSL v2 / v3)和传输层安全性(TLS v1)网络协议以及它们所需的相关加密标准。
星哥玩云
2022/07/31
2.8K0
使用OpenSSL创建CA和申请证书
高性能 Nginx HTTPS 调优 - 如何为 HTTPS 提速 30%
Nginx 常作为最常见的服务器,常被用作负载均衡 (Load Balancer)、反向代理 (Reverse Proxy),以及网关 (Gateway) 等等。一个配置得当的 Nginx 服务器单机应该可以期望承受住 50K 到 80K 左右每秒的请求,同时将 CPU 负载在可控范围内。
程序员白楠楠
2021/02/22
1.3K0
Windows IIS OCSP的开启和检测
题目虽然是“Windows IIS OCSP的开启和检测”,实际上检测方法是通用的,Web Server不限于是IIS还是Apache、Nginx等。
Windows技术交流
2020/08/21
2.5K0
使用Let's Encrypt的SSL证书配置HTTPS手记
前段时间,看见很多大会都在分享全站HTTPS的经验。HTTPS固然好,前提是SSL证书,并且签发证书的机构要靠谱。沃通的CA证书就相继被Mozilla和Google封杀了。曾经对于普通用户,权威,安全,并且免费的证书无疑就像天上的星星,可望而不可及。现在,这些星星变成了馅饼掉了下来。没错,我们可以申请安全免费的ssl证书--- Let's Encrypt。 Let’s Encrypt是电子前哨基金会(EFF)发布的免费 SSL 证书服务,Google,Mozilla和Microsoft都极力支持。很早之前就
李海彬
2018/03/19
2.5K0
使用Let's Encrypt的SSL证书配置HTTPS手记
https原理及实践
转载请注明出处 安全知识 网络安全问题 数据机密性 在网络传输数据信息时,对数据的加密是至关重要的,否则所有传输的数据都是可以随时被第三方看到,完全没有机密性可言。 数据机密性解决问题思路 利用算法 为了保证数据的机密性,首先可以采用的方法就是将数据通过相应算法,转换为其它的数据信息,然后再通过相应算法反推出真正的数据是什么,这样一来就保证了数据在网络传输过程中安全性,不会被其它人轻易的看到传输过程中的数据信息。数据加密前的信息称为明文数据(plaintext),经过加密算法转换后进行传输的信息称为密文数据
863987322
2018/03/29
1.5K0
https原理及实践
使用 openssl 生成证书(含openssl详解)
openssl 是目前最流行的 SSL 密码库工具,其提供了一个通用、健壮、功能完备的工具套件,用以支持SSL/TLS 协议的实现。 官网:https://www.openssl.org/source/
菲宇
2019/06/12
17.6K0
使用 openssl 生成证书(含openssl详解)
SSL与TLS协议原理与证书签名多种生成方式实践指南
原文地址: SSL与TLS协议原理与证书签名多种生成方式实践指南 (https://mp.weixin.qq.com/s/g-X8UPNwIkuR_Qd2MDvVQw)
全栈工程师修炼指南
2022/09/29
1.7K0
SSL与TLS协议原理与证书签名多种生成方式实践指南
相关推荐
使用openssl生成证书_怎样验证普通话证书的真假
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验