2017-08-25 10 views
0

私が持っている1 Ngnix Serverおよびその他のNgnixサーバー合格証明書

場合、私curlコマンドを使用して、[その他のバックエンドサーバーがyy.yyが言う] [葉状体エンドはXX.XX言います] yy.yyサーバー上のクライアントcetificateとキーを渡しています私は、バックエンドサーバからの成功を取得しています

問題:XX.XXサーバー上でクライアントcetificateとキーを渡しています curlコマンドを使用している場合、私は取得していますエラー

400 Bad Request

Req私yy.yyサーバーの場合

server { 
    listen  443; 

    server_name yy.yy 
    ssl on; 
    ssl_certificate  /etc/yyyycert.pem; 
    ssl_certificate_key /etc/yy.key; 
    ssl_client_certificate /etc/ca-chain-scb.cert.pem; 
    ssl_verify_client on; 
    location/{ 
     proxy_set_header  Host   $host; 
     proxy_set_header  X-Real-IP  $remote_addr; 
     proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header  X-Forwarded-User  $remote_user; 
     proxy_pass http://127.0.0.1:8080; 
     } 
} 

server { 
    listen  443; 

    server_name xx.xx 
    ssl on; 
    ssl_certificate  /etc/xxxx.pem; 
    ssl_certificate_key /etc/xx.key; 
    ssl_verify_client on; 
    location ~ ^/SCB/(.*)$ { 
     proxy_set_header X-SSL-CERT $ssl_client_cert; 
     rewrite /SCB(.*) $1 break; 
     proxy_pass https://yy.yy:443; 
    } 
} 
+0

あなたのnginxの設定を投稿する –

+0

xx.xxサーバの場合 サーバ{ listen 443; server_name xx.xx; ssl on; ssl_certificate /etc/xx.cert.pem; ssl_certificate_key /etc/xx.key; 場所〜^/SCB /(.*)$ { proxy_set_header X-SSL-CERT $ ssl_client_cert; 書き換え/SCB(.*)$ 1中断; proxy_pass https://yy.yy:443; } } –

+0

投稿は問題でありコメントではありません。両方の設定を投稿する –

答えて

0

バックエンドを助けてくださいので、私の場合はXX.XXがサーバー

をyy.yyする証明書を渡していません

をuired SSL証明書を送りました。サーバーはクライアント証明書を受信しないため、400エラーを生成しています。すべての着信SSLセッションは、リバースプロキシで終了しています。リバースプロキシは、新しいセッションを作成してバックエンドに接続します。通常、プロキシは接続しようとするとクライアント証明書を送信しないため、エラーが発生します。

あなたが代わりにリバースプロキシとバックエンドでクライアント証明書認証を強制したい場合は、ディレクティブを使用することができproxy_ssl_certificateproxy_ssl_certificate_key、およびリバースプロキシサーバー上のproxy_ssl_verify。これにより、プロキシは独自のクライアント証明書でバックエンドに認証されます。これはバックエンドとの接続で渡されないため、元のクライアント証明書の受信と検証と同じではありません。

元のクライアント証明書情報をバックエンドに渡す必要がある場合は、バックエンドに接続するときに、変数$ssl_client_certを要求ヘッダーに送信してください。 This pageには、さまざまな証明書のプロパティを使用した例があります。これは依然として元のクライアント証明書を検証するバックエンドと同じではありませんが、バックエンドがリバースプロキシを信頼していると仮定すると、同様の効果が得られます。

現在、バックエンドサーバーは、リバースプロキシの背後にある間に元のクライアント証明書を検証することはできません。これはNginx(またはApache)の制限ではありませんが、クライアント証明書認証を使用する場合のSSLの動作のためです。