Java openssl,java调用openssl
00-1010支持OCSP装订的网站介绍获取服务器的证书获取OCSP响应者的地址发送OCSP请求更简单的方法总结
目录
OCSP在线证书状态协议被提议用来代替CRL。一般来说,现代web服务器支持OCSP,OCSP也是现代web服务器的标准。
但是,并非所有web服务器都支持OCSP装订。但在实践中,我们可能需要知道特定网站的OCSP支持程度。
00-1010如何判断网站是否支持OCSP装订?
最简单的方法就是去第三方网站查询网站的证书信息。以我们之前提到的entrust.ssllabs.com为例,通过输入相应的网站信息,可以在协议详情部分找到网站是否支持OCSP钉钉的具体信息,如下图:
你可以在这个网站上看到OCSP装订开始了。但事实上,世界上大多数网站都不开放OCSP钉钉。
那么除了在第三方网站查OCSP订书还有其他方法吗?
事实上,我们可以很容易地用openssl工件做到这一点。当然前提是这个网站支持https。
接下来,我们将详细说明从获取服务器的证书到验证服务器是否支持OCSP装订的整个过程。
本文要验证的网站是微软官网中的www.squarespace.com,是一个支持OCSP装订的网站。
00-1010验证服务器是否支持OSCP,我们首先需要获取该服务器的证书,可以使用openssl提供的openssl s _ client-connect来完成。
OpenSSL s _ client-connect www . squarespace.com :443该命令将输出已建立连接的所有内容,包括要访问的网站的证书信息。
因为我们只需要网站的证书,我们需要保存- BEGIN CERTIFICATE -和-end certificate-之间的内容。
那么最后的命令如下:
OpenSSL _ client-connect www.squarespace.com :443 sed -n /- begin/,/-end/p ca . PEM我们使用sed-n命令截取以-begin和-开头的输出。
我们终于拿到了网站的证书。
除了网站本身的证书,网站本身的证书是其他证书颁发的。这些证书称为中间证书,我们需要获取整个证书链。
您还可以使用openssl的openssl s _ client-show certs命令来获取所有证书链:
OpenSSL _ client-show certs-connect www.squarespace.com :443 sed-n /-begin/,/-end/p chain.pem如果打开chain . PEM文件,可以发现里面有两个证书,最上面的是服务器本身的证书。
00-1010如果证书中包含OCSP响应者的地址,则可以使用以下命令获取该地址:
OpenSSL 509-noout-ocsp _ uri-Inca . PEM我们可以得到网站的ocsp响应者的地址:http://ocsp.digicert.com。
还有另一种方法可以获得ocsp应答器的地址:
OpenSSL 509-text-noout-Inca . PEM该命令将输出证书的所有信息,我们可以看到以下内容:
权威信息访问:
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,但是我们可以通过使用上面的命令来有效的进行判断。
到此这篇关于Java使用openssl检测网站是否支持ocsp的文章就介绍到这了,更多相关openssl检测网站内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。