Nginx

OCSP 驗證 - 無法獲取本地頒發者證書

  • July 19, 2015

我是從頭開始設置 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 中:

  1. 我的伺服器.crt
  2. 中級 CA 捆綁包 (RapidSSL SHA256 CA - G3)
  3. 中級 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 &gt; ocsp-chain.crt

並添加ocsp-chain.crtssl_trusted_certificate指令。

引用自:https://serverfault.com/questions/630975