web-dev-qa-db-ja.com

nginx-リバースプロキシ証明書認証

Nginxを、Tomcatを実行している内部Webサーバーへのリバースプロキシとして使用しようとしています。Tomcatは、ERPシステムのフロントエンドをホストしています。

それはすでに正常に動作しています:nginxサーバー(ネットワーク、別のVLAN、ファイアウォールなどでロックされている)に完全に接続してから、リバースプロキシを私のERPサーバーに接続できます。

ただし、ユーザーが最初の(nginx)サーバーにアクセスできるように、ユーザーが自分のコンピューターにデジタル証明書を持っていることを要求することにより、追加の保護層を追加したいと思います。証明書は使用されていません/バックエンドサーバーに必要です。

私はこのチュートリアルを済ませました http://nategood.com/client-side-certificate-authentication-in-ngi これにより、自己署名証明書およびその他すべてを生成できました。

Nginx構成でssl_verify_client optionalを使用すると、バックエンドサーバーに正常に接続できますが、証明書は要求/要求されません。

ssl_verify_client onに切り替えると、すべてのアクセスが

400 Bad Request

No required SSL certificate was sent

使用しているブラウザ(Chrome、IE、Edge、Firefox)に関係なく。もちろん、すべての証明書/チェーンをクライアントコンピューターに配置しましたが、どのブラウザーでも証明書は要求されません。何が欠けていますか?

これが私の完全なnginx設定です:

server {
        listen 443;
        ssl on;
        server_name 103vportal;

        ssl_password_file /etc/nginx/certs/senha.txt;
        ssl_certificate      /etc/nginx/certs/server.crt;
        ssl_certificate_key  /etc/nginx/certs/server.key;
        ssl_client_certificate /etc/nginx/certs/ca.crt;
        ssl_verify_client on;


        location / {
                proxy_pass http://10.3.0.244:16030;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";

                proxy_read_timeout 300;
                proxy_send_timeout 300;
        }

}
2
Luiz Carlos

この答えは私にとってうまくいきました:

https://stackoverflow.com/questions/41933654/nginx-reverse-proxy-certificate-authentication

コツは、提供されたコマンドを使用して個人証明書を作成し、その証明書の下でホスト名/ DNSコンボを使用することでした。

1
Luiz Carlos