Linux

nginx 代理 + ssl +clr“400 錯誤請求”錯誤

  • June 30, 2015

情況是這樣的——有一個透明的 nginx 代理處理 SSL 證書,並且在我們決定添加撤銷列表管理之前做得很好,出於安全原因需要。這是“ssl_crl”線發揮作用並搞砸一切的時候。

server {
   listen  80;
   rewrite ^ https://$host$request_uri permanent;
}


server {
   listen 443 ssl;
   server_name example.com;
   ssl on;
   ssl_certificate /home/netadmin/keys/tid.crt;
   ssl_certificate_key /home/netadmin/keys/tid.key;
   ssl_session_cache shared:SSL:10m;
   ssl_client_certificate /home/netadmin/keys/personchain.pem;
   ssl_crl /home/netadmin/keys/personlist.crl;
   ssl_verify_client on;
   ssl_verify_depth 2;
   error_log /var/log/nginx/debug.log debug;

   location / {
           proxy_pass      http://111.111.111.111:80;
   }

每當使用者嘗試使用 SSL 進行身份驗證時,伺服器總是會給出“400 Bad Request”錯誤。請注意,完全相同(由於語法不同)配置在 Apache 中完美執行。現在證書是完美無缺的,這已經被多次證明,這裡是驗證檢查,例如

openssl crl -CAfile personchain.pem -inform PEM -in personlist.crl -lastupdate -nextupdate -noout
verify OK
lastUpdate=Apr 22 14:59:18 2013 GMT 
nextUpdate=Apr 29 14:59:18 2013 GMT 

CRL 連結正常工作,沒有任何問題,這是錯誤日誌的一部分。

2013/04/23 15:47:42 [info] 3612#0: *1 client SSL certificate verify error: (3:unable to get certificate CRL) while reading client request headers, client: 192.168.122.1, server: example.com, request: "GET / HTTP/1.1", host: "example.com"

這基本上是唯一的錯誤,正如我之前所說,相同的證書適用於 Apache。我認為這可能是一個錯誤,但最後一次類似錯誤的通知是 2011 年的,所以我懷疑還沒有人解決這個難題。

與此處相同的答案:https ://serverfault.com/a/676498/277052:如果您有多個 CA,則必須連接所有 CRL。

您必須連接鏈中的所有 CRL:根 CA 和中間 CA。

使用openssl crl -in crl_list.crl -noout -text只讀取第一個 crl,但 nginx 正確讀取它們並驗證使用者證書。

靈感來源:https ://www.ruby-forum.com/topic/6874370

nginx 程序是否具有對該 crl 的讀取權限?它是否採用正確的 pem 格式並由與根 crt 相同的 ca 簽名?

例子:

$ openssl crl -text -noout -in personlist.crl

參考: http: //www.apacheweek.com/features/crl

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