web-dev-qa-db-ja.com

nginxプロキシサーバーに特定のSSLプロトコルを強制する

リモートのhttps Webサービスに対するアプリケーションを開発しています。開発中、ローカル開発サーバー(ubuntuでnginxを実行)からリモートhttps Webサーバーにリクエストをプロキシする必要があります。関連するnginx設定は次のとおりです。

server {
    server_name project.dev;
    listen 443;
    ssl on;
    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;

    location / {

        proxy_pass      https://remote.server.com;
        proxy_set_header Host remote.server.com;
        proxy_redirect off;
    }
}

問題は、次のopenssl呼び出しからわかるように、リモートHTTPSサーバーがSSLv3経由の接続のみを受け入れることができることです。

機能していない:

$ openssl s_client -connect remote.server.com:443                 
CONNECTED(00000003)
139849073899168:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:177:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 226 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
---

ワーキング:

$ openssl s_client -connect remote.server.com:443 -ssl3
CONNECTED(00000003)
<snip>
---
SSL handshake has read 1562 bytes and written 359 bytes
---
New, TLSv1/SSLv3, Cipher is RC4-SHA
Server public key is 1024 bit
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : SSLv3
    Cipher    : RC4-SHA
<snip>

現在のセットアップでは、私のnginxプロキシは502 Bad Gatewayブラウザで接続したとき。エラーログでdebugを有効にすると、次のメッセージが表示されます:[info] 1451#0: *16 peer closed connection in SSL handshake while SSL handshaking to upstream

追加してみましたssl_protocols SSLv3;をnginx構成に追加しましたが、それは役に立ちませんでした。

正しく機能するようにこれを設定する方法を誰かが知っていますか?

編集-リクエストされた追加情報が追加されました:

OpenSSLバージョンのUbuntu 12.04で実行:

$ openssl version
OpenSSL 1.0.1 14 Mar 2012

ソリューション

以下の@Christopher Perrinが提供する解決策は、opensslを1.0.0にダウングレードすることです。これは私のためにこれを正常に実行したコマンドです(AMD64で実行されているubuntu 12.04上):

wget http://launchpadlibrarian.net/81976289/openssl_1.0.0e-2ubuntu4_AMD64.deb
Sudo dpkg -i openssl_1.0.0e-2ubuntu4_AMD64.deb
wget http://launchpadlibrarian.net/81976290/libssl1.0.0_1.0.0e-2ubuntu4_AMD64.deb
Sudo dpkg -i libssl1.0.0_1.0.0e-2ubuntu4_AMD64.deb
5
vitch

あなたの問題の可能な解決策が説明されています ここ

バグのため、NginxシステムでOpenSSL 1.0.0にダウングレードする必要があります。

1

これは、Nginxがバックエンドサーバーに接続しようとするたびにTLSv1.1とTLSv1.2が導入されたopensslバージョン1.0.1でコンパイルされたNginxを使おうとすると、peer closed connection in SSL handshake (54: Connection reset by peer) while SSL handshaking to upstream Nginx Debug Logsでは、バックエンドはTLSv1.1およびTLSv1.2をサポートしていません。

ロードバランサーを使用している場合、お客様/クライアントはロードバランサーファームウェアをアップグレードする必要があります。

4
fahmad

Nginxボックスのopensslライブラリをアップグレードする最近の更新後、Windows 2003でNginxをIIS 6にリバースプロキシするという同様の問題に遭遇しました。私にとってうまくいったのは、Nginxディレクティブを変更することです。

ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;

proxy_ssl_protocols   TLSv1;
1
Jim Walker

サーバーによって告知されるsslバージョンを強制しようとする

ssl_prefer_server_ciphers on;
ssl_protocols SSLv3 TLSv1;
# Set the ciphers to use. You may have to fix formatting. 
ssl_ciphers DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:\
            EDH-RSA-DES-CBC3-SHA:AES256-SHA:DES-CBC3-SHA:\
            AES128-SHA:RC4-SHA:RC4-MD5;
0
Mike