転載・引用について

ユーザ用ツール

サイト用ツール


tweet:2016:0112_01

NGiNX+SSL+Authで認証に失敗する

管理しているシステムで、不思議な挙動に遭遇したので、メモっておく。

とりあえず解決はしたっぽいのだが、あまりにもWorkAroundっぽいので、「これで今後も大丈夫なのか?」も含めて、原因は不明。

問題が発生した環境

対外部分:NGiNXを用いたHTTP/HTTPs LoadBalancer * OS: FreeBSD 10.2-RELEASE * NGiNX: 1.8.0 (portsから)

  • Compile Optionとして、LDAP AuthモジュールとDEBUG関連Moduleを投入している

内部: Zabbix * OS: CentOS 7 * Apache * Zabbix (http://zabbix.example.com / https://zabbix.example.com )

     +------------+     +-----------------------+
-----+ FBSD/NGiNX +-----+ CentOS7/Apache/Zabbix |
     +------------+     +-----------------------+

発生した症状

* https接続(SSL)で、Zabbixにアクセスし、スクリーンタブを開くと、Basic認証画面が表示され、一部の画像が取れなくなる。

  • そのページの全ての画像が見られなくなるわけではないところが悩ましい。
  • 同じページをhttpで接続(not SSL)すると、問題なく表示できる。
  • 認証に失敗し取得できなかった画像ページを直接アクセスすると、問題なく画像が取得できる。

発生時の設定(抜粋)

なお、ここでは、LDAP設定の方を記載しているが、BASIC認証でも同じ問題が発生した。

(snip...)
ssl_engine			cryptodev;	# for AES-NI
(snip...)
http {
(snip...)
	##### SSL Configuration
	ssl_ciphers			DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-CAMELLIA128-SHA:DHE-RSA-AES128-SHA:AES128-GCM-SHA256:AES128-SHA256:CAMELLIA128-SHA:AES128-SHA:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-CAMELLIA256-SHA:DHE-RSA-AES256-SHA:AES256-GCM-SHA384:AES256-SHA256:CAMELLIA256-SHA:AES256-SHA:!aNULL:!MD5;
	ssl_prefer_server_ciphers	on;
	ssl_protocols			TLSv1.2 TLSv1.1 TLSv1;
	ssl_session_cache		shared:SSLresumption:10m;
	ssl_session_timeout		10m;

	##### LDAP Authentication Configuration
	ldap_server ldap {
		url ldap://...
		require valid_user;
	}

	upstream ZAB { server 192.0.2.128:80  max_fails=3 fail_timeout=10; }
	server {
		listen		198.51.100.128:80;
		server_name	zabbix.example.com;

		auth_ldap "Forbidden";
		auth_ldap_servers ldap;
		location / {
			proxy_pass		http://ZAB/;
			proxy_redirect		default;
		}
	}
	server {
		listen		198.51.100.128:443 ssl;
		server_name	zabbix.example.com;

		auth_ldap "Forbidden";
		auth_ldap_servers ldap;

		ssl on;
		ssl_certificate		/some/where/zabbix.cert;
		ssl_certificate_key	/some/where/zabbix.key;

		location / {
			proxy_pass		http://ZAB/;
			proxy_redirect		default;
		}
	}
}

WordAround

なぜか、設定を以下のように修正したら、この問題は再現しなくなった。

(snip...)
ssl_engine			cryptodev;	# for AES-NI
(snip...)
http {
(snip...)
	large_client_header_buffers	4 256k;

	##### SSL Configuration
	ssl_ciphers			DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-CAMELLIA128-SHA:DHE-RSA-AES128-SHA:AES128-GCM-SHA256:AES128-SHA256:CAMELLIA128-SHA:AES128-SHA:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-CAMELLIA256-SHA:DHE-RSA-AES256-SHA:AES256-GCM-SHA384:AES256-SHA256:CAMELLIA256-SHA:AES256-SHA:!aNULL:!MD5;
	ssl_prefer_server_ciphers	on;
	ssl_protocols			TLSv1.2 TLSv1.1 TLSv1;
	ssl_session_cache		shared:SSLresumption:10m;
	ssl_session_timeout		10m;

	##### LDAP Authentication Configuration
	ldap_server ldap {
		url ldap://...
		require valid_user;
	}

	upstream ZAB { server 192.0.2.128:80  max_fails=3 fail_timeout=10; }
	server {
		listen		198.51.100.128:80;
		server_name	zabbix.example.com;

		auth_ldap "Forbidden";
		auth_ldap_servers ldap;
		location / {
			proxy_pass		http://ZAB/;
			proxy_redirect		default;
		}
	}
	server {
		listen		198.51.100.128:443 ssl;
		server_name	zabbix.example.com;

		ssl on;
		ssl_certificate		/some/where/zabbix.cert;
		ssl_certificate_key	/some/where/zabbix.key;

		auth_ldap "Forbidden";
		auth_ldap_servers ldap;
		location / {
			proxy_pass		http://ZAB/;
			proxy_redirect		default;
		}
	}
}

つまり、 * large_client_header_buffersを大きくすると問題は出なくなった という状況。

判明している条件

* SSLを利用している時に限定して問題が発現する * auth情報をlocation指定の外に置くと、問題が発現する * 問題が発生した場合、そのページ内では常に問題が発現し、再現可能

  • ただし、再現条件の詳細は不明。単純にURLの長さというわけではないように見える

とりあえずのメモ

なぜHTTPとHTTPsで異なるかは不明だが、HTTPsを利用している場合、414(URI Too Long)が返る。

これ以上は、後日。

このウェブサイトはクッキーを使用しています。 Webサイトを使用することで、あなたはあなたのコンピュータにクッキーを保存することに同意します。 また、あなたはあなたが私たちのプライバシーポリシーを読んで理解したことを認めます。 同意しない場合はウェブサイトを離れてください。クッキーに関する詳細情報
tweet/2016/0112_01.txt · 最終更新: 2016/01/12 16:08 by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki