Java使用openssl檢測(cè)網(wǎng)站是否支持ocsp
簡(jiǎn)介
OCSP在線證書(shū)狀態(tài)協(xié)議是為了替換CRL而提出來(lái)的。對(duì)于現(xiàn)代web服務(wù)器來(lái)說(shuō)一般都是支持OCSP的,OCSP也是現(xiàn)代web服務(wù)器的標(biāo)配。
但是OCSP stapling卻不是所有的web服務(wù)器都支持。但是現(xiàn)實(shí)工作中我們可能需要知道具體某個(gè)網(wǎng)站對(duì)OCSP的支持程度。
支持OCSP stapling的網(wǎng)站
怎么判斷一個(gè)web站點(diǎn)是否支持OCSP stapling呢?
最簡(jiǎn)單的方法就是去第三方網(wǎng)站查看網(wǎng)站的證書(shū)信息。比如我們之前提到過(guò)的entrust.ssllabs.com,通過(guò)輸入對(duì)應(yīng)的網(wǎng)站信息,在
Protocol Details一節(jié)中,可以找到網(wǎng)站是否支持OCSP stapling的具體信息,如下所示:

可以看到這個(gè)網(wǎng)站是開(kāi)啟了OCSP stapling的。但是事實(shí)上這個(gè)世界上的絕大部分網(wǎng)站是沒(méi)有開(kāi)啟OCSP stapling的。
那么除了在第三方網(wǎng)站上查看OCSP stapling之外,還有沒(méi)有其他辦法呢?
事實(shí)上我們可以使用openssl神器輕松的做到這一點(diǎn)。當(dāng)然前提是這個(gè)網(wǎng)站支持https。
接下來(lái)我們會(huì)詳細(xì)講解從獲取服務(wù)器的證書(shū)到驗(yàn)證服務(wù)器是否支持OCSP stapling的一整套流程。
本文要驗(yàn)證的網(wǎng)站是微軟的官網(wǎng)www.squarespace.com,這是一個(gè)支持OCSP stapling的網(wǎng)站。
獲取服務(wù)器的證書(shū)
要校驗(yàn)服務(wù)器是否支持OSCP,我們首先需要獲取到這個(gè)服務(wù)器的證書(shū),可以用openssl提供的 openssl s_client -connect來(lái)完成這個(gè)工作。
openssl s_client -connect www.squarespace.com:443
這個(gè)命令會(huì)輸出建立連接的所有內(nèi)容,其中包含了要訪問(wèn)網(wǎng)站的證書(shū)信息。
因?yàn)槲覀冎恍枰W(wǎng)站的證書(shū),所以需要把-----BEGIN CERTIFICATE-----和-----END CERTIFICATE-----之間的內(nèi)容保存即可。
那么最終的命令如下:
openssl s_client -connect www.squarespace.com:443 | sed -n '/-----BEGIN/,/-----END/p' > ca.pem
這里我們使用一個(gè)sed -n命令從輸出中截取以-----BEGIN開(kāi)頭和以-----END結(jié)尾的數(shù)據(jù)。
最終我們得到了網(wǎng)站的證書(shū)。
除了網(wǎng)站本身的證書(shū)之外,網(wǎng)站的證書(shū)本身是由其他的證書(shū)來(lái)簽發(fā)的,這些證書(shū)叫做intermediate certificate,我們需要獲取到整個(gè)證書(shū)鏈。
同樣使用openssl的openssl s_client -showcerts命令可以獲取所有的證書(shū)鏈:
openssl s_client -showcerts -connect www.squarespace.com:443 | sed -n '/-----BEGIN/,/-----END/p' > chain.pem
如果你打開(kāi)chain.pem文件可以發(fā)現(xiàn),文件里面有兩個(gè)證書(shū),最上面的一個(gè)就是服務(wù)器本身的證書(shū),而第二個(gè)就是用于簽名服務(wù)器證書(shū)的intermediate certificate。
獲取OCSP responder地址
如果證書(shū)中包含有OCSP responder的地址,那么可以用下面的命令來(lái)獲?。?/p>
openssl x509 -noout -ocsp_uri -in ca.pem
我們可以得到網(wǎng)站的ocsp responder地址是:http://ocsp.digicert.com。
還有一種方法可以獲得ocsp responder的地址:
openssl x509 -text -noout -in ca.pem
這個(gè)命令會(huì)輸出證書(shū)的所有信息,我們可以看到下面的內(nèi)容:
Authority Information Access:
OCSP - URI:http://ocsp.digicert.com
CA Issuers - URI:http://cacerts.digicert.com/DigiCertTLSRSASHA2562020CA1-1.crt
其中OCSP - URI就是OCSP responder的地址。
發(fā)送OCSP請(qǐng)求
有了OCSP responder的地址,我們就可以進(jìn)行OCSP驗(yàn)證,在這個(gè)命令中我們需要用到服務(wù)器的證書(shū)和intermediate證書(shū)。
具體的請(qǐng)求命令如下:
openssl ocsp -issuer chain.pem -cert ca.pem -text -url http://ocsp.digicert.com
從輸出中我們可以得到兩部分,第一部分是OCSP Request Data,也就是OCSP請(qǐng)求數(shù)據(jù):
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
從請(qǐng)求數(shù)據(jù)中,我們可以看到詳細(xì)的OCSP請(qǐng)求數(shù)據(jù)結(jié)構(gòu),包括issuer的內(nèi)容和OCSP nonce。
第二部分是響應(yīng)數(shù)據(jù),很遺憾我們得到了下面的請(qǐng)求錯(cuò)誤響應(yīng)數(shù)據(jù):
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
上面返回結(jié)果中,Cert Status: good表示的是OCSP請(qǐng)求成功了,這個(gè)網(wǎng)站是一個(gè)支持OCSP協(xié)議的網(wǎng)站。
后面的兩行是OCSP上次更新的時(shí)間和下次更新的時(shí)間:
This Update: Apr 30 04:21:01 2022 GMT
Next Update: May 7 03:36:01 2022 GMT說(shuō)明這個(gè)網(wǎng)站還支持OCSP stapling。
另外,請(qǐng)求某些網(wǎng)站的OCSP url的時(shí)候可能會(huì)得到下面的異常:
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
為什么會(huì)這樣呢?
這是因?yàn)閛csp.msocsp.com這個(gè)網(wǎng)站不支持OCSP默認(rèn)的HTTP 1.0請(qǐng)求,在HTTP 1.0請(qǐng)求中默認(rèn)是沒(méi)有Host這個(gè)請(qǐng)求頭的。所以我們需要添加上Host請(qǐng)求頭,然后再執(zhí)行一次即可。
一個(gè)更加簡(jiǎn)單的方法
以上我們實(shí)際上是將請(qǐng)求拆開(kāi)來(lái)一步步執(zhí)行的。我們還可以使用openssl一步執(zhí)行任務(wù)如下:
openssl s_client -tlsextdebug -status -connect www.squarespace.com:443
從輸出中,我們可以看到下面的數(shù)據(jù):
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結(jié)果,從結(jié)果中我們很清楚的看到該網(wǎng)站是否支持OCSP和OCSP stapling。
總結(jié)
雖然大多數(shù)網(wǎng)站都不支持OCSP stapling,但是我們可以通過(guò)使用上面的命令來(lái)有效的進(jìn)行判斷。
到此這篇關(guān)于Java使用openssl檢測(cè)網(wǎng)站是否支持ocsp的文章就介紹到這了,更多相關(guān)openssl檢測(cè)網(wǎng)站內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringSecurity實(shí)現(xiàn)訪問(wèn)控制url匹配
本文主要介紹了SpringSecurity實(shí)現(xiàn)訪問(wèn)控制url匹配,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
SpringBoot使用阿里OSS實(shí)現(xiàn)文件云存儲(chǔ)的方法
這篇文章主要介紹了SpringBoot使用阿里OSS實(shí)現(xiàn)文件云存儲(chǔ),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
java同步器AQS架構(gòu)AbstractQueuedSynchronizer原理解析下
這篇文章主要為大家介紹了java同步器AQS架構(gòu)AbstractQueuedSynchronizer原理解析下,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-03-03

