mod_auth_kerb를 사용하는 Apache는 항상 비밀번호를 두 번 묻습니다.

mod_auth_kerb를 사용하는 Apache는 항상 비밀번호를 두 번 묻습니다.

(데비안 스퀴즈)

AD 사용자가 로그인할 수 있도록 Kerberos 인증을 사용하도록 Apache를 설정하려고 합니다. 작동하지만 사용자에게 사용자 이름과 비밀번호를 묻는 메시지가 두 번 표시되고 처음에는 무엇을 입력하든 무시됩니다. ) 두 번째 프롬프트에만 구성의 AuthName 문자열이 포함됩니다. (예: 첫 번째 창은 일반 사용자 이름/비밀번호이고, 두 번째 창에는 "Kerberos 로그인"이라는 제목이 포함되어 있습니다.) 이 단계에서는 Windows 통합 인증이 작동하는 것에 대해 걱정하지 않습니다. 사용자가 자신의 AD 계정으로 로그인할 수 있기를 원하므로 사용자 계정의 두 번째 저장소를 설정할 필요가 없습니다.

첫 번째 쓸모없는 메시지를 없애려면 이 문제를 어떻게 해결해야 합니까?

apache2.conf 파일의 지시어:

<Directory /var/www/kerberos>
AuthType Kerberos
AuthName "Kerberos Login"
KrbMethodNegotiate On
KrbMethodK5Passwd On
KrbAuthRealms ONEVUE.COM.AU.LOCAL
Krb5KeyTab /etc/krb5.keytab
KrbServiceName HTTP/[email protected]
require valid-user
</Directory>

krb5.conf:

[libdefaults]
    default_realm = ONEVUE.COM.AU.LOCAL
[realms]
    ONEVUE.COM.AU.LOCAL = {
        kdc = SYD01PWDC01.ONEVUE.COM.AU.LOCAL
        master_kdc = SYD01PWDC01.ONEVUE.COM.AU.LOCAL
        admin_server = SYD01PWDC01.ONEVUE.COM.AU.LOCAL
        default_domain = ONEVUE.COM.AU.LOCAL
    }
[login]
    krb4_convert = true
    krb4_get_tickets = false

보안 디렉터리에 액세스할 때의 액세스 로그(두 개의 별도 401에 유의)

192.168.10.115 - - [24/Aug/2012:15:52:01 +1000] "GET /kerberos/ HTTP/1.1" 401 710 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.83 Safari/537.1"
192.168.10.115 - - [24/Aug/2012:15:52:06 +1000] "GET /kerberos/ HTTP/1.1" 401 680 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.83 Safari/537.1"
192.168.10.115 - [email protected] [24/Aug/2012:15:52:10 +1000] "GET /kerberos/ HTTP/1.1" 200 375 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.83 Safari/537.1"

그리고 error.log의 한 줄

[Fri Aug 24 15:52:06 2012] [error] [client 192.168.0.115] gss_accept_sec_context(2) failed: An unsupported mechanism was requested (, Unknown error)

답변1

아직도 답변이 필요한지 모르겠지만 제 경험을 공유하여 다른 사람에게 도움이 되기를 바랍니다. 나는 당신이 이 단계를 따르면 모든 것이 잘 될 것이라고 믿습니다.

  1. 에 대한 적절한 DNS 항목이 있는지 확인하십시오.SYD01TBUG02웹 서버를 가리키는 DNS 서버의 (A 레코드)
  2. 웹 서비스의 SPN과 AD 사용자가 연결되어 있는지 확인하세요. AD 서버에서 다음 명령을 실행하십시오.

    setspn -A HTTP/SYD01TBUG02.onevue.com.au.local ad_username

  3. 적절한 키탭이 생성되었는지 확인하세요. AD 서버에서 다음 명령을 실행하세요.

    ktpass -princ HTTP/[email protected] -mapuser ad_username -pass xxxxxx -crypto ALL -ptype KRB5_NT_PRINCIPAL -out SYD01TBUG02.keytab -setupn -setpass

    여기서 xxxxxx는 AD 사용자 비밀번호입니다. 우리는 사용-암호화 ALL지원되는 모든 해시를 keytab 파일에 추가하는지 확인하는 옵션입니다.
  4. 이제 생성된 복사본을 만들어야 합니다.SYD01TBUG02.keytab웹서버에 파일을 저장하고 특정 디렉토리에 복사하세요. 예를 들어,/etc/apache2/keytab/폴더.
  5. 웹 서비스용 Apache 구성 파일의 예:
    <VirtualHost *:80>
        DocumentRoot "/var/www/kerberos"
        ServerName SYD01TBUG02.onevue.com.au.local
        ServerAlias SYD01TBUG02
        AddDefaultCharset UTF-8
        DirectoryIndex index.php
        ErrorLog /var/log/apache2/error_SYD01TBUG02.log
        TransferLog /var/log/apache2/transfer_SYD01TBUG02.log
        LogLevel warn
        ServerAdmin [email protected]
        
        <Location "/">
            AuthType Kerberos
            KrbAuthRealms ONEVUE.COM.AU.LOCAL
            KrbServiceName HTTP/[email protected]
            Krb5Keytab /etc/apache2/keytab/SYD01TBUG02.keytab
            KrbMethodNegotiate on
            KrbMethodK5Passwd on
            KrbVerifyKDC on
            require valid-user    
        </Location>
        <Directory />
        </Directory>
    </VirtualHost> 
    
  6. 아파치를 다시 로드하거나 다시 시작하세요.sudo service apache2 reload
  7. 이제 브라우저 주소 표시줄에 http://SYD01TBUG02/를 입력하면 SSO를 통해 자동으로 웹 서비스에 로그인됩니다(Chrome, Chromium 유사 브라우저 및 IE는 기본적으로 SSO를 지원하지만파이어폭스용 플러그인).

웹서버에서 Kerberos 인증을 설정하는 데 도움이 되기를 바랍니다.

추신전체 주소로 SSO를 활성화하려는 경우(예:SYD01TBUG02.onevue.com.au.local) 추가해야합니다SYD01TBUG02.onevue.com.au.localAD 그룹 정책(도메인의 여러 시스템에 필요한 경우)을 통해 또는 Internet Explorer 설정을 통해 로컬로 인트라넷 영역에 연결합니다. 이러한 설정은 시스템에 설치된 모든 브라우저에 영향을 미칩니다.

답변2

사용자가 처음으로 u/p를 입력하면 ntlm 토큰이 서버로 전송되기 때문입니다. 두 번째로 올바른 Kerberos 토큰입니다.

불행하게도 첫 번째 메시지를 제거할 수 있는 방법은 없습니다.

답변3

싱글 사인온(SSO)이 요구 사항이 아닌 경우 'KrbMethodNegotiate off'를 설정하여 협상을 비활성화할 수 있습니다. 이렇게 하면 단일 기본 로그인만 제공되고 각 거래에 대한 추가 GET 요청도 방지됩니다.

관련 정보