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


9

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

誰かそれについて考えがありますか?


この問題の解決策を見つけることができましたか?まったく同じ症状です。
Gani Simsek

ガニさん、よくわかりません。私は「not-sure-if-works」ソリューションをここserverfault.com/a/426599/111458に書きました。私の遅い答えを許しなさい。それでも解決策が必要な場合は、私の答えを試してみて、うまくいったかどうかを私に知らせてください=)
Aurelin

回答:


7

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

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

/etc/krb5.confKDCをとして参照するようにファイルを変更することで回避できる場合がありますkdc = tcp/kdc.name.here。この問題は、PACが原因でトークンがUDPデータグラムに対して大きすぎる場合に発生する可能性がありますが、TCPを使用してKDCへの通信を強制することも回避策の1つです。

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


(ええと、うーん、誤ってコメントを削除しました。私はまだ寝ているようです)ええと、私は彼らにそれを変更するかどうか尋ねるかもしれませんが、組織のせいで疑わしいと思います。構造。そして、私のプロジェクトが非常に重要であるというわけではないので、私は/etc/krb5.confの変更を最初に試みます。ところで、なぜこの問題がIEでのみ発生し、OperaやFirefoxでは発生しないのでしょうか?
オーレリン

/etc/krb5.confを変更しようとしましたが、それでもまったく修正されません。もう1つわかったことは、リンクがWin2k3サーバーのソリューションのみを説明していることですが、Win2k8 RC2を実行しています。申し訳ありませんでした。
オーレリン

うーん..それは少し奇妙だったと言わなければなりません
オーレリン

2

MacのSafariのDrupal 7サイトでこのエラーが発生し、ブラウザウィンドウを閉じてブラウザのキャッシュをクリアし、ブラウザを終了して、ブラウザを再度開き、ページを再ロードすると、発生していたエラーが停止することがわかりました今回は。

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


2
私には「Microsoft」ソリューションのように聞こえます。再起動して、問題が解消されることを願っています。
Colin 't Hart

1
@Colin、これが「Microsoft」の答えのように聞こえるかもしれないとはいえ、何度もそれがまさに必要なものです。ブラウザのキャッシュをクリアすると、多くのブラウザがメモリ内キャッシュを空にできないため、ブラウザを再起動する必要があります。これは確かにMac版のFirefox、Chrome、Caminoに適用されます。私はSafariを使用したことがないので、コメントはできません。
John Gardeniers、

1

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

問題は、LimitRequestLineの値を8KBより大きい値に設定したい場合、8KBが固定のmaxSize(http://httpd.apache.org/docs/であるため、ソースを変更してApacheを再コンパイルする必要があるということです。2.2 / mod / core.html#limitrequestline)。

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


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.