Apache 错误请求“请求标头字段的大小超出服务器限制”与 Kerberos SSO

Apache 错误请求“请求标头字段的大小超出服务器限制”与 Kerberos SSO

我正在通过运行在 Apache 上的网站(SLES 11.1 上的 Apache2)为 Active Directory 用户设置 SSO,使用 Firefox 测试时一切正常。但当我尝试在 Internet Explorer 8(Windows 7)中打开该网站时,我得到的只是

“错误的请求

您的浏览器发送了一个该服务器无法理解的请求。

请求标头字段的大小超出服务器限制。

授权:协商[超长字符串]”

我的 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 的几个较小的值。

另一件我觉得很奇怪的事情是,即使使用 LogLevel debug,我也不会收到有关此问题的任何日志。日志的最后一行是

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

有人对此有想法吗?

答案1

我的直觉告诉我,您有一个非常大的安全令牌,可能是因为该用户是大量组的成员。AD Kerberos 实现将为 Apache 提供特权属性证书(PAC)。如果用户是大量组的成员,此结构可能会很大。您可以使用tokensz.exe工具查看用户的令牌大小。

如果这是问题,你可以修改用户帐户的 UserAccountControl 属性以防止 PAC 被发送。

您可能能够通过修改/etc/krb5.conf文件来引用 KDC kdc = tcp/kdc.name.here。如果 PAC 导致令牌对于 UDP 数据报来说太大,则可能会发生此问题,但强制使用 TCP 与 KDC 通信也是一种可行的解决方法。

如果这能解决您的问题,那么更改 1,000 个用户的该值对于您的 AD 管理员来说并不困难。

答案2

我找到了另一个解决方案,但我不确定它是否真的有效。Apache Docs 指出,对于大包,我必须设置 LimitRequestFieldSize 和/或 LimitRequestLine 。

问题是,如果你想将 LimitRequestLine 的值设置为高于 8KB 的任何值,那么你必须修改源代码并重新编译 Apache,因为 8KB 是固定的 maxSize(http://httpd.apache.org/docs/2.2/mod/core.html#limitrequestline)。

我不确定这种方法是否有效,因为我后来在第二台服务器上从我们自己的存储库重新安装了 apache。看来这是一个不同的软件包版本,因为问题没有在那里发生。

答案3

我在 Mac 上的 Safari 中的 Drupal 7 网站上遇到了这个错误,我发现关闭浏览器窗口并清除浏览器缓存,退出浏览器,重新打开浏览器并重新加载页面可以停止错误,这种错误只发生过一次。

错误请求 您的浏览器发送了一个该服务器无法理解的请求。> 请求标头字段的大小超出服务器限制。Cookie /n

答案4

如果有人遇到 mod_proxy_ajp 的这个问题,请查看:从哪个 Apache 版本开始 LimitRequestFieldSize 不再硬编码为最大 8k?

相关内容