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


9

我正在通过在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调试,我也不会收到与此有关的任何日志。日志的最后一行是

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

有人对此有想法吗?


您是否能够找到解决此问题的方法?我有完全相同的症状。
加尼·辛塞克

嘿,加尼,我不确定。我在serverfault.com/a/426599/111458上写了我的“不确定是否可行”解决方案。请原谅我迟来的答案。如果您仍然需要解决方案,请尝试我的回答,并让我/我们知道是否
可行

Answers:


7

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

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

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

如果它可以解决您的问题,那么对1,000名用户更改此值对于您的AD管理员而言并不困难。


(嗯,该死,不小心删除了评论。看来我还在睡觉)好,所以我可能问他们是否会改变它,但是由于组织的原因,我对此表示怀疑。结构体。并不是说我的项目非常重要,所以..我将首先尝试对/etc/krb5.conf进行修改。.谢谢。顺便说一句,为什么这个问题只出现在IE中,而不出现在Opera和Firefox中,您知道吗?
Aurelin'2

我试图修改/etc/krb5.conf,但这根本无法解决。我刚刚发现的另一件事是,您的链接仅描述了Win2k3服务器的解决方案,但是我们运行Win2k8 RC2。我忘了提,抱歉。
Aurelin'2

好吧..我不得不说这
有点奇怪

2

我在Mac上的Safari中的Drupal 7网站上发生了此错误,发现关闭浏览器窗口并清除浏览器的缓存,退出浏览器,将其打开并备份并重新加载页面,可以中止仅发生的错误这一次。

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


2
对我来说,这听起来像是一个“微软”解决方案:重新启动,希望问题解决。
科林·哈特(

1
@Colin,无论这听起来多少像是“ Microsoft”答案,很多时候正是这所需要的。清除浏览器的缓存时,许多浏览器无法清空内存中的缓存,因此需要重新启动浏览器。它当然适用于Mac版本的Firefox,Chrome和Camino。我从不使用Safari,因此无法对此发表评论。
John Gardeniers 2012年

1

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

事实是,如果要将LimitRequestLine的值设置为大于8KB的值,则必须修改源代码并重新编译Apache,因为8KB是固定的maxSize(http://httpd.apache.org/docs/ 2.2 / mod / core.html#limitrequestline)。

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.