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

33次阅读

共计 4120 个字符,预计需要花费 11 分钟才能阅读完成。

简介

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 来实现这个工作。

 openssl s_client -connect www.squarespace.com:443

这个命令会输入建设连贯的所有内容,其中蕴含了要拜访网站的证书信息。

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

那么最终的命令如下:

  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 命令能够获取所有的证书链:

openssl s_client -showcerts  -connect www.squarespace.com:443 | sed -n '/-----BEGIN/,/-----END/p' > chain.pem

如果你关上 chain.pem 文件能够发现,文件外面有两个证书,最下面的一个就是服务器自身的证书,而第二个就是用于签名服务器证书的 intermediate certificate。

获取 OCSP responder 地址

如果证书中蕴含有 OCSP responder 的地址,那么能够用上面的命令来获取:

openssl x509 -noout -ocsp_uri -in ca.pem 

咱们能够失去网站的 ocsp responder 地址是:http://ocsp.digicert.com

还有一种办法能够取得 ocsp responder 的地址:

openssl x509 -text -noout -in ca.pem

这个命令会输入证书的所有信息,咱们能够看到上面的内容:

 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 证书。

具体的申请命令如下:

openssl ocsp -issuer chain.pem -cert ca.pem -text -url http://ocsp.digicert.com

从输入中咱们能够失去两局部,第一局部是 OCSP Request Data, 也就是 OCSP 申请数据:

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。

第二局部是响应数据,很遗憾咱们失去了上面的申请谬误响应数据:

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 上次更新的工夫和下次更新的工夫:

    This Update: Apr 30 04:21:01 2022 GMT
    Next Update: May  7 03:36:01 2022 GMT

阐明这个网站还反对 OCSP stapling。

另外,申请某些网站的 OCSP url 的时候可能会失去上面的异样:

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 一步执行工作如下:

openssl s_client -tlsextdebug -status -connect www.squarespace.com:443

从输入中,咱们能够看到上面的数据:

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/

最艰深的解读,最粗浅的干货,最简洁的教程,泛滥你不晓得的小技巧等你来发现!

欢送关注我的公众号:「程序那些事」, 懂技术,更懂你!

正文完
 0