OpenSSL 通過OCSP手動驗證證書


翻譯:https://raymii.org/s/articles/OpenSSL_Manually_Verify_a_certificate_against_an_OCSP.html?utm_source=tuicool&utm_medium=referral

目錄:

1、ocsp客戶端獲取證書

2、獲取證書信任鏈

3、發送ocsp請求

4、吊銷證書

5、其他錯誤

 

這篇文章主要用來說明如何借助ocsp服務器來驗證證書。ocsp(The Online Certificate Status Protocol)是一種驗證證書狀態的一種方式,也是CRL(certificate revocation list)證書吊銷的一種替代方式。

與傳統的CRL比較有以下特點:

  • 由於相對於傳統的CRL,一個ocsp響應包含的信息更少,故ocsp能夠更有效利用網絡和客戶資源
  • 用OCSP,客戶無需自己解析CRL證書吊銷列表,但是客戶需要存儲狀態信息,而由於客戶側需要維護存儲緩存,故導致存儲信息很復雜。在實際使用中,這點帶來的影響卻很小,由於第三庫提供的相關接口已經幫我們完成此類工作
  • OCSP通過專用網絡、專用證書、在特定的時間公開其服務。OCSP不強制加密,故可能帶來信息泄露的風險。

此文章中用到的openssl的版本為:OpenSSL 1.0.1g 7 Apr 2014

1、獲取證書用於ocsp驗證

首先,我們將從一個網站上獲取一個證書,這里我們用Wikipedia作為樣例來進行。我們獲取證書通過如下命令:

openssl s_client -connect wikipedia.org:443 2>&1 < /dev/null | sed -n '/-----BEGIN/,/-------END/p' 

 

過該命令可以獲取wikipedia.org的客戶端證書

保存這個輸出到wikipedia.pem文件中

openssl s_client -connect wikipedia.org:443 2>&1 < /dev/null | sed -n '/-----BEGIN/,/-------END/p' > wikipedia.pem

 現在,檢查整個證書中是否包含ocsp網址

openssl x509 -noout -ocsp_uri -in wikipedia.pem

  若執行正確則輸出 http://ocsp.digicert.com ,否則你就不能驗證這個證書通過ocsp

 2、獲取證書鏈

由於這個證書認證是一級一級逐層進行,故需要獲得與這個證書相關的證書鏈。利用openssl s_client -showcerts 選項,能夠查看到在該信任鏈上的所有相關證書

openssl s_client -connect wikipedia.org:443 -showcerts 2>&1 < /dev/null

  

 

如你所見,輸出能夠看到兩個證書,number 1 和number 0,其中number 0就是我們剛剛獲取的那個證書。如果你的網站有更多證書在認證鏈中,那么你將看到更多證書。為了發送證書,需要保存證書鏈中所有證書到一個文件chain.pem,按照剛剛命令輸出的證書順序,根證書總是在文件結尾。

3、發送ocsp認證請求

現在我們有ocsp認證請求的所有信息,使用下面命令發送ocsp認證請求。

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

 其結果如下

OCSP Request Data:
    Version: 1 (0x0)
    Requestor List:
        Certificate ID:
          Hash Algorithm: sha1
          Issuer Name Hash: ED48ADDDCB7B00E20E842AA9B409F1AC3034CF96
          Issuer Key Hash: 50EA7389DB29FB108F9EE50120D4DE79994883F7
          Serial Number: 0114195F66FAFF8FD66E12496E516F4F
    Request Extensions:
        OCSP Nonce:
            0410DA634F2ADC31DC48AE89BE64E8252D12
OCSP Response Data:
    OCSP Response Status: successful (0x0)
    Response Type: Basic OCSP Response
    Version: 1 (0x0)
    Responder Id: 50EA7389DB29FB108F9EE50120D4DE79994883F7
    Produced At: Apr  9 08:45:00 2014 GMT
    Responses:
    Certificate ID:
      Hash Algorithm: sha1
      Issuer Name Hash: ED48ADDDCB7B00E20E842AA9B409F1AC3034CF96
      Issuer Key Hash: 50EA7389DB29FB108F9EE50120D4DE79994883F7
      Serial Number: 0114195F66FAFF8FD66E12496E516F4F
    Cert Status: good
    This Update: Apr  9 08:45:00 2014 GMT
    Next Update: Apr 16 09:00:00 2014 GMT

    Signature Algorithm: sha1WithRSAEncryption
         56:21:4c:dc:84:21:f7:a8:ac:a7:b9:bc:10:19:f8:19:f1:34:
         c1:63:ca:14:7f:8f:5a:85:2a:cc:02:b0:f8:b5:05:4a:0f:28:
         50:2a:4a:4d:04:01:b5:05:ef:a5:88:41:d8:9d:38:00:7d:76:
         1a:aa:ff:21:50:68:90:d2:0c:93:85:49:e7:8e:f1:58:08:77:
         a0:4e:e2:22:98:01:b7:e3:27:75:11:f5:b7:8f:e0:75:7d:19:
         9b:74:cf:05:dc:ae:1c:36:09:95:b6:08:bc:e7:3f:ea:a2:e3:
         ae:d7:8f:c0:9d:8e:c2:37:67:c7:5b:d8:b0:67:23:f1:51:53:
         26:c2:96:b0:1a:df:4e:fb:4e:e3:da:a3:98:26:59:a8:d7:17:
         69:87:a3:68:47:08:92:d0:37:04:6b:49:9a:96:9d:9c:b1:e8:
         cb:dc:68:7b:4a:4d:cb:08:f7:92:67:41:99:b6:54:56:80:0c:
         18:a7:24:53:ac:c6:da:1f:4d:f4:3c:7d:68:44:1d:a4:df:1d:
         48:07:85:52:86:59:46:d1:35:45:1a:c7:6b:6b:92:de:24:ae:
         c0:97:66:54:29:7a:c6:86:a6:da:9f:06:24:dc:ac:80:66:95:
         e0:eb:49:fd:fb:d4:81:6a:2b:81:41:57:24:78:3b:e0:66:70:
         d4:2e:52:92
wikipedia.pem: good
    This Update: Apr  9 08:45:00 2014 GMT
    Next Update: Apr 16 09:00:00 2014 GMT

 如果你需要更簡略的輸出,去掉-text 選項,該選項一般用於調試

openssl ocsp -issuer chain.pem -cert wikipedia.pem -url http://ocsp.digicert.com
wikipedia.pem: good
    This Update: Apr  9 08:45:00 2014 GMT
    Next Update: Apr 16 09:00:00 2014 GMT

 4、吊銷證書

如果你有一個吊銷的證書,你也可以測試該證書按照上述步驟,所得的響應如下:

Response verify OK
test-revoked.pem: revoked
    This Update: Apr  9 03:02:45 2014 GMT
    Next Update: Apr 10 03:02:45 2014 GMT
    Revocation Time: Mar 25 15:45:55 2014 GMT

5、其他錯誤

如果證書和ocsp服務不匹配,驗證將錯誤,使用-text選項可以查看具體錯誤。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM