免費SSL證書的OCSP問題


類似蘋果這種變態的生態要驗證OCSP,非常的艹蛋,白屏很難受,不然就只能買某些類型的證書,比如symantec之類。

然后let's encrypt 給的免費泛域名證書配上acme.sh還是很不錯的,基本上不用管,寫個定時任務定期restart一下nginx就行了。

可是問題是ocsp.int-x3.letsencrypt.org這個域名在國內非常的不穩定,總是要卡一下才出來,具體原因可以說很長一段了,現在來說如何解決;

首先nginx可以使用ocsp本地化來解決,也就是nginx直接在SSL握手的時候發送ocsp來避免直接向ocsp.int-x3.letsencrypt.org發送驗證請求;

下面就是開啟nginx ocsp的方法:

        # 開啟 OCSP Stapling ---當客戶端訪問時 NginX 將去指定的證書中查找 OCSP 服務的地址,獲得響應內容后通過證書鏈下發給客戶端。
    	ssl_stapling on;
        # 開啟 OCSP Stapling file本地化,定期刷新一下到本地,比resolve更快。
    	ssl_stapling_file /root/.acme.sh/domain.com/ocsp_sta.oscp;
    	# 啟用OCSP響應驗證,OCSP信息響應適用的證書
    	ssl_stapling_verify on;
    	#若 ssl_certificate 指令指定了完整的證書鏈,則 ssl_trusted_certificate 可省略。
    	ssl_trusted_certificate /root/.acme.sh/domain.com/fullchain.cer; 

那么問題來了ocsp文件從哪里來呢?

首先你的服務器得有比較新的openssl,然后通過下面的指令獲取ocsp文件

openssl ocsp -no_nonce -respout ocsp_sta.oscp -issuer ca.cer -cert domain.com.cer -url http://ocsp.int-x3.letsencrypt.org/ -header "HOST" "ocsp.int-x3.letsencrypt.org" -verify_other fullchain.cer

注意,-verify_other fullchain.cer 是一定要的,不然你會得到一個下面的錯誤:

Response Verify Failure
140255965575056:error:27069076:OCSP routines:OCSP_basic_verify:signer certificate not found:ocsp_vfy.c:92:

接下來驗證一下是否已經帶上OCSP驗證了

openssl s_client -connect 127.0.0.1:443 -servername domain.com -status -tlsextdebug < /dev/null 2>&1 | grep -i "OCSP response"

如果得到:

OCSP response:
OCSP Response Data:
    OCSP Response Status: successful (0x0)
    Response Type: Basic OCSP Response

那么恭喜你,都OK了。

 

剩下就是寫腳本定時更新oscp,定期restart nginx。

ps,nginx需要定期restart, reload是不行的。


免責聲明!

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



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