web-dev-qa-db-ja.com

nginxプロキシ+ ssl + clr「400不正なリクエスト」エラー

これが状況です-SSL証明書を処理し、セキュリティ上の理由で必要な失効リスト管理を追加することを決定するまでそれをうまく実行する透過的なnginxプロキシがあります。これは、「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で認証しようとすると、サーバーは常に「400BadRequest」エラーを出します。まったく同じ(構文のため同じではない)構成が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年のものであるため、このパズルをまだ解決した人はいないと思います。

6
Pavel Potatis

ここと同じ答え: 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/687437

2
Nicolas Malbran

Nginxプロセスはそのcrlへの読み取りアクセス権を持っていますか?また、それは適切なpem形式であり、root crtと同じcaによって署名されていますか?

例:

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

リファレンス: http://www.apacheweek.com/features/crl

0
user182320