web-dev-qa-db-ja.com

Kerberos SSOを使用したApache Bad Request「リクエストヘッダーフィールドのサイズがサーバーの制限を超えています」

Apache(SLES 11.1のApache2)で実行されるWebサイトを介してActive DirectoryユーザーのSSOを設定しています。Firefoxでテストすると、すべて正常に動作します。しかし、Internet Explorer 8(Windows 7)でWebサイトを開こうとすると、

"要求の形式が正しくありません

お使いのブラウザが、このサーバーが理解できないリクエストを送信しました。

リクエストヘッダーフィールドのサイズがサーバーの制限を超えています。

承認:交渉[超長い文字列] "

私のvhost.cfgは次のようになります。

<VirtualHost hostname:443>
  LimitRequestFieldSize 32760
  LimitRequestLine 32760
  LogLevel debug

  <Directory "/data/pwtool/sec-data/adbauth">
    AuthName "Please login with your AD-credentials (Windows Account)"
    AuthType Kerberos
    KrbMethodNegotiate on
    KrbAuthRealms REALM.TLD
    KrbServiceName HTTP/hostname
    Krb5Keytab /data/pwtool/conf/http_hostname.krb5.keytab
    KrbMethodK5Passwd on
    KrbLocalUserMapping on
    Order allow,deny
    Allow from all
  </Directory>

  <Directory "/data/pwtool/sec-data/adbauth">
    Require valid-user
  </Directory>

    SSLEngine on
    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
    SSLCertificateFile /etc/Apache2/ssl.crt/hostname-server.crt
    SSLCertificateKeyFile /etc/Apache2/ssl.key/hostname-server.key
</VirtualHost>

また、Cookieが削除されていることを確認し、LimitRequestFieldSizeとLimitRequestLineにいくつかの小さい値を試しました。

私にとって奇妙に思われるもう1つのことは、LogLevelデバッグを使用しても、これに関するログを取得できないことです。ログの最後の行は

ssl_engine_kernel.c(1879): OpenSSL: Write: SSL negotiation finished successfully

誰もがそれについて考えを持っていますか?

9
Aurelin

私の直感によると、おそらくユーザーが多数のグループのメンバーであるため、非常に大きなセキュリティトークンを取得しているとのことです。 AD Kerberos実装は、Apacheにデフォルトで Privilege Attribute Certificate (PAC)を提供します。ユーザーがかなりの数のグループのメンバーである場合、この構造は大きくなる可能性があります。 tokensz.exeツールを使用 して、ユーザーのトークンサイズを確認できます。

これが問題である場合、PACが送信されないように ユーザーのアカウントのUserAccountControl属性を変更 できます。

/etc/krb5.confファイルを変更して、KDCをkdc = tcp/kdc.name.hereとして参照できるようにすることができます。この問題は、PACによってトークンがUDPデータグラムに対して大きすぎる場合に発生する可能性がありますが、TCP.

1,000人のユーザーでこの値を変更しても、問題が解決すればAD管理者は難しくありません。

7
Evan Anderson

Mac上のSafariのDrupal 7サイトでこのエラーが発生し、ブラウザウィンドウを閉じて、ブラウザのキャッシュをクリアし、ブラウザを終了し、ブラウザを開いて、ページをリロードします。今回のみ発生したエラーの解消に努めました。

不正なリクエストブラウザがこのサーバーが理解できないリクエストを送信しました。 >リクエストヘッダーフィールドのサイズがサーバーの制限を超えています。クッキー/ n

2
Dean Flory

別の解決策を見つけましたが、実際に機能するかどうかはわかりません。 Apache Docsによると、大きなパッケージではLimitRequestFieldSizeやLimitRequestLineを設定する必要があります。

問題は、LimitRequestLineの値を8KBより大きい値に設定したい場合、8KBが固定のmaxSize( http://httpd.Apache。 org/docs/2.2/mod/core.html#limitrequestline )。

この方法が機能するかどうかはわかりません。後で2番目のサーバーの独自のリポジトリからApacheを再インストールしたためです。問題はそこで発生しなかったため、これは別のパッケージバージョンであったようです。

1
Aurelin

誰かがmod_proxy_ajpでこの問題に遭遇した場合は、次を見てください: どのApacheバージョンからLimitRequestFieldSizeが最大8kにハードコードされなくなったか

1