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

Aur*_*lin 10 single-sign-on mod-auth-kerb bad-request apache-2.2

我正在通过运行在 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>
Run Code Online (Sandbox Code Playgroud)

我还确保删除了 cookie,并为 LimitRequestFieldSize 和 LimitRequestLine 尝试了几个较小的值。

另一件对我来说似乎很奇怪的事情是,即使使用 LogLevel 调试,我也不会得到任何关于此的日志。日志的最后一行是

ssl_engine_kernel.c(1879): OpenSSL: Write: SSL negotiation finished successfully
Run Code Online (Sandbox Code Playgroud)

有没有人有这个想法?

Eva*_*son 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 管理员来说并不困难。