简介

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 responder4346349100: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/

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

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