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>

또한 쿠키가 삭제되었는지 확인하고 LimitRequestFieldSize 및 LimitRequestLine에 대해 몇 가지 작은 값을 시도했습니다.

나에게 이상하게 보이는 또 다른 것은 LogLevel 디버그를 사용하더라도 이것에 대한 로그를 얻지 못한다는 것입니다. 로그의 마지막 줄은

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

누구든지 그것에 대한 아이디어가 있습니까?


이 문제에 대한 해결책을 찾았습니까? 나는 정확히 같은 증상을 겪고 있습니다.
Gani Simsek

가니, 잘 모르겠어 "fault-if-works"솔루션을 여기 serverfault.com/a/426599/111458에 작성했습니다 . 늦게 대답 해주세요 여전히 해결책이 필요하다면, 나의 대답을 시도하고 그것이 효과가 있는지 알려주십시오. =)
Aurelin

답변:


7

내 직감에 따르면 사용자가 많은 그룹의 구성원이기 때문에 매우 큰 보안 토큰이 있다고합니다. AD Kerberos 구현은 기본적으로 Apache에 PAC ( Privilege Attribute Certificate )를 제공합니다. 사용자가 많은 수의 그룹의 구성원 인 경우이 구조가 클 수 있습니다. 도구사용하여tokensz.exe 사용자의 토큰 크기를 볼 수 있습니다 .

이것이 문제 이면 PAC가 전송되지 않도록 사용자 계정의 UserAccountControl 특성을 수정할 수 있습니다 .

/etc/krb5.confKDC를로 참조하도록 파일을 수정하지 않아도됩니다 kdc = tcp/kdc.name.here. PAC로 인해 UDP 데이터 그램에 비해 토큰이 너무 큰 경우이 문제가 발생할 수 있지만 TCP를 사용하여 KDC와의 통신을 강제로 수행 할 수도 있습니다.

문제를 해결하더라도 1,000 명의 사용자에서이 값을 변경하는 것이 AD 관리자에게는 어렵지 않습니다.


(아, 젠장, 실수로 댓글을 삭제했습니다. 나는 여전히 자고있는 것 같습니다.) 글쎄, 나는 그들이 그것을 바꿀 것인지 물을 수 있지만 조직으로 인해 의심합니다. 구조. 내 프로젝트가 중요하지 않다는 것은 아닙니다. 먼저 /etc/krb5.conf를 수정 해 보도록하겠습니다. 감사합니다. Btw, 왜이 문제가 IE에서만 발생하고 Opera 또는 Firefox에서는 발생하지 않는지 알고 있습니까?
Aurelin

/etc/krb5.conf를 수정하려고 시도했지만 전혀 수정되지 않았습니다. 내가 방금 알아 낸 또 다른 것은 귀하의 링크가 Win2k3 서버에 대한 솔루션만을 설명하지만 Win2k8 RC2를 실행한다는 것입니다. 나는 그것을 언급하는 것을 잊었다. 죄송합니다.
Aurelin

글쎄요 .. 좀 이상하다고 말해야합니다
Aurelin

2

Mac의 Safari에있는 Drupal 7 사이트에서이 오류가 발생했으며 브라우저 창을 닫고 브라우저의 캐시를 지우고 브라우저를 종료 한 후 브라우저를 열고 페이지를 다시로드하면 오류가 중단되었습니다. 이번엔

잘못된 요청 브라우저가이 서버가 이해할 수없는 요청을 보냈습니다. > 요청 헤더 필드의 크기가 서버 제한을 ​​초과합니다. 쿠키 / n


2
나에게 "Microsoft"솔루션처럼 들린다 : 재부팅하고 문제가 사라지기를 바란다.
Colin 't Hart

1
@Colin, 이것이 "Microsoft"답변처럼 들릴 수있는 횟수에 관계없이 여러 번 정확히 필요한 것입니다. 브라우저 캐시를 지우면 많은 브라우저가 메모리 내 캐시를 비우지 못하므로 브라우저를 다시 시작해야합니다. Firefox, Chrome 및 Camino의 Mac 버전에 확실히 적용됩니다. 나는 결코 Safari를 사용하지 않으므로 그에 대해 언급 할 수 없습니다.
John Gardeniers

1

다른 솔루션을 찾았지만 실제로 작동하는지 확실하지 않습니다. Apache Docs는 큰 패키지의 경우 LimitRequestFieldSize 및 / 또는 LimitRequestLine을 설정해야한다고 말합니다.

문제는 LimitRequestLine의 값을 8KB보다 높은 값으로 설정하려면 8KB가 고정 된 maxSize ( http://httpd.apache.org/docs/) 이므로 소스를 수정하고 Apache를 다시 컴파일해야합니다 . 2.2 / mod / core.html # limitrequestline ).

나중에이 방법을 사용할 수 있는지 확실하지 않습니다. 나중에 두 번째 서버의 자체 저장소에서 아파치를 다시 설치했기 때문입니다. 문제가 발생하지 않았기 때문에 이것은 다른 패키지 버전 인 것 같습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.