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

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

“错误的请求

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

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

授权:协商[超长string]“

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

另一件对我来说很奇怪的事情是,即使使用LogLeveldebugging,我也不会得到任何关于这个的日志。 日志的最后一行是

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

有没有人有这个想法?

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

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

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

如果您的ADpipe理员解决了您的问题,那么更改1000个用户的值并不困难。

我在Mac上的Safari中的Drupal 7网站上发生了这个错误,并发现closures浏览器窗口并清除浏览器的caching,退出浏览器,打开它并重新加载页面,以终止仅发生错误这一次。

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

我find了另一个解决scheme,但我不确定它是否真的有效。 Apache Docs指出,对于大包我将不得不设置LimitRequestFieldSize和/或LimitRequestLine。

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

我不知道这个方法是否可行,因为我稍后在第二个服务器上从我们自己的仓库中重新安装了apache。 看来,这是一个不同的软件包版本,因为问题在那里没有发生。

如果有人用mod_proxy_ajp命中这个问题,看看: 从哪个Apache版本起,LimitRequestFieldSize不再硬编码为8k max?