OCSP 驗證 - 無法獲取本地頒發者證書
我是從頭開始設置 SSL 的新手,並做了我的第一步。我從 RapidSSL 為我的域購買了 SSL 證書,並按照那裡的步驟安裝證書。一般來說,證書是有效的並且可以在我的網路伺服器上執行(nginx v1.4.6 - Ubuntu 14.04.1 LTS),但是如果我嘗試啟動 OCSP OCSP,我的 nginx error.log 中會出現以下錯誤:
OCSP_basic_verify() 在請求證書狀態時失敗(SSL:錯誤:27069065:OCSP 常式:OCSP_basic_verify:證書驗證錯誤:驗證錯誤:無法獲取本地頒發者證書),響應者:gv.symcd.com
我也從命令行使用此命令進行了嘗試:
openssl s_client -connect mydomain.tld:443 2>&1 < /dev/null
並在我的error.log中得到了“相同”的錯誤:
$$ … $$SSL 會話:協議:TLSv1.2 密碼:ECDHE-RSA-AES256-GCM-SHA384 $$ … $$ 開始時間:1411583991 超時:300(秒)驗證返回碼:20(無法獲取本地頒發者證書)
但是,如果下載 GeoTrust 根證書並使用以下命令進行嘗試:
openssl s_client -connect mydomain.tld:443 -CAfile GeoTrust_Global_CA.pem 2>&1 < /dev/null
驗證正常:
$$ … $$SSL 會話:協議:TLSv1.2 密碼:ECDHE-RSA-AES256-GCM-SHA384 $$ … $$ 開始時間:1411583262 超時:300(秒)驗證返回碼:0(正常)
所以不知何故找不到/傳遞GeoTrust Root Cert。
我的 nginx 站點配置:
server { listen 443; server_name mydomain.tld; ssl on; ssl_certificate /etc/ssl/certs/ssl.crt; ssl_certificate_key /etc/ssl/private/ssl.key; # Resumption ssl_session_cache shared:SSL:20m; # Timeout ssl_session_timeout 10m; # Security options ssl_prefer_server_ciphers on; ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS; ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; # OCSP Stapling # It means that you sent status info about your certificate along with the request, # instead of making the browser check the certificate with the Certificate Authority. # This removes a large portion of the SSL overhead, the CloudFlare post above explains it in more detail. ssl_stapling on; ssl_stapling_verify on; #ssl_trusted_certificate /etc/ssl/certs/ssl.pem; #resolver 8.8.8.8 8.8.4.4 valid=300s; #resolver_timeout 10s; # This forces every request after this one to be over HTTPS add_header Strict-Transport-Security "max-age=31536000";[...]};
RapidSSL 在他的文件中寫道,我應該按照以下順序將以下證書添加到 ssl.crt 中:
- 我的伺服器.crt
- 中級 CA 捆綁包 (RapidSSL SHA256 CA - G3)
- 中級 CA 捆綁包 (GeoTrust Global CA)
所以我做了…
現在我不知道我做錯了什麼……希望這裡的任何人都可以幫助我。
謝謝!
儘管錯誤消息相同,但這兩個錯誤無關。
$$ … $$SSL 會話:協議:TLSv1.2 密碼:ECDHE-RSA-AES256-GCM-SHA384$$ … $$開始時間:1411583991 超時:300(秒)驗證返回碼:20(無法獲取本地頒發者證書)
發出了上述錯誤openssl_client命令。正如 Florian Heigl 所解釋的,您會收到此錯誤,因為 openssl_client 需要
/etc/ssl/certs
.OCSP_basic_verify() 在請求證書狀態時失敗(SSL:錯誤:27069065:OCSP 常式:OCSP_basic_verify:證書驗證錯誤:驗證錯誤:無法獲取本地頒發者證書),響應者:gv.symcd.com
對於這個錯誤,它是由nginx ocsp 常式發出的,尤其是當您
ssl_stapling_verify on;
在 nginx.conf 中添加行時。這裡摘自文件的一些摘錄
ssl_stapling_verify
來解釋為什麼它會拋出錯誤語法:ssl_stapling_verify on | 離開;
啟用或禁用伺服器對 OCSP 響應的驗證。
為了使驗證工作,伺服器證書頒發者的證書、根證書和所有中間證書應使用 ssl_trusted_certificate 指令配置為受信任的。
換句話說,您需要為指令提供( 2) 中間 CA 捆綁包 (RapidSSL SHA256 CA - G3)和(3) 中間 CA 捆綁包 (GeoTrust Global CA)
ssl_trusted_certificate
。cat GeoTrustGlobalCA.crt rapidsslG3.crt > ocsp-chain.crt
並添加
ocsp-chain.crt
到ssl_trusted_certificate
指令。