nginx優化https(ocsp)

前言

當用戶使用客戶端或其他的設備訪問https網站時,需要先驗證https證書,驗證方式有兩種:

  • 證書頒發機構(ca)的證書吊銷列表(CRL),CRL列出被認爲不能再使用的證書的序列號。客戶端通過訪問CRL來驗證網站證書是否有效。

  • 在線證書狀態協議(ocsp),其OCSP查詢地址是http://ocsp.int-x3.letsencrypt.org/,瀏覽器需要發送請求到這個地址來驗證證書狀態。

在線證書狀態協議(OCSP)克服了證書註銷列表(CRL)的主要缺陷:必須經常在客戶端下載以確保列表的更新。當用戶試圖訪問一個服務器時,在線證書狀態協議發送一個對於證書狀態信息的請求。服務器回覆一個“有效”、“過期”或“未知”的響應。協議規定了服務器和客戶端應用程序的通訊語法。在線證書狀態協議給了用戶的到期的證書一個寬限期,這樣他們就可以在更新以前的一段時間內繼續訪問服務器。
ocsp比crl方式更加高效,但ocsp也存在一些問題,實時查詢證書會給客戶端帶來一定性能影響,另一方面需要訪問ca提供的第三方中心話驗證服務器,如果這個第三方驗證服務出現問題,或被攻擊,將會導致ocsp驗證失敗。
這裏我們推薦更先進的OCSP stapling。

什麼是OCSP stapling?

正式名稱爲TLS證書狀態查詢擴展,可代替在線證書狀態協議(OCSP)來查詢X.509證書的狀態。服務器在TLS握手時發送事先緩存的OCSP響應,用戶只需驗證該響應的有效性而不用再向數字證書認證機構(CA)發送請求。說白了,服務器代替客戶端去進行OCSP查詢,緩存查詢結果,然後在與客戶端進行TLS連接時返回給客戶端。

Nginx 配置 OCSP stapling

我使用的環境如下:

CentOS/7.7.x
NginX /1.12.x # 它從 1.3.7+ 開始支持OCSP stapling特性。

nginx配置
        listen 443 ssl;
        ssl_certificate /etc/nginx/ssl/xxx.com/cert.pem;
        ssl_certificate_key /etc/nginx/ssl/xxx.com/key.pem;

        ssl_stapling on;
        ssl_stapling_verify on;# 啓用OCSP響應驗證,OCSP信息響應適用的證書
        ssl_trusted_certificate /path/to/xxx.pem;#選項應指向CA的根證書
        resolver 8.8.8.8 8.8.4.4 216.146.35.35 216.146.36.36 valid=60s;#添加resolver解析OSCP響應服務器的主機名,valid表示緩存。
        resolver_timeout 2s;# resolver_timeout表示網絡超時時間

檢測

檢查https網站是否開啓OCSP stapling有兩種方法:
1.SSL Labs https://www.ssllabs.com/ssltest/index.html
如果開啓返回
OCSP stapling Yes
2.通過命令

openssl s_client -connect admin.xxx.com:443 -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

參考資料

http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_ocsp_cache
https://blog.sometimesnaive.org/article/13.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章