Apache-2.2

網站的 Kerberos 和 signle-sign-on

  • October 21, 2013

我有一個使用 Apache 在 Linux 電腦上執行的網站。我使用 mod_auth_kerb 對 Windows Active Directory 伺服器進行單點登錄 Kerberos 身份驗證。

為了讓 Kerberos 正常工作,我在 Active Directory 中創建了一個名為dummy.

我使用以下命令在 Windows AD 伺服器上使用 ktpass.exe 為 Linux Web 伺服器生成了一個密鑰表:

ktpass /out C:\krb5.keytab /princ HTTP/example.com@REALM.EXAMPLE.COM /mapuser dummy@REALM.EXAMPLE.COM /crypto RC4-HMAC-NT /ptype KRB5_NT_PRINCIPAL /pass xxxxxxxxx

我可以使用以下命令從 Linux Web 伺服器成功獲取票證:

kinit -k -t /path/to/keytab HTTP/example.com@REALM.EXAMPLE.COM

… 並使用 . 查看票證klist

我還使用以下 Kerberos 屬性配置了我的 Web 伺服器:

<Directory />
   AuthType                Kerberos
   AuthName                "Example.com Kerberos domain"
   KrbMethodK5Passwd       Off
   KrbAuthRealms           EXAMPLE.COM
   KrbServiceName          HTTP/example.com@REALM.EXAMPLE.COM
   Krb5KeyTab              /path/to/keytab
   Require                 valid-user
   SSLRequireSSL
   <Files wsgi.py>
           Order deny,allow
           Allow from all
   </Files>
</Directory>

但是,當我嘗試登錄網站(從另一個使用使用者名“Jeff”的桌面)時,Web 伺服器不會自動接受我的 Kerberos 憑據。之後它應該立即授予我訪問權限,但它沒有。我從 mod_auth_kerb 日誌中獲得的唯一資訊是:

kerb_authenticate_user entered with user (NULL) and auth_type Kerberos

但是,當我將 mod_auth_kerb 設置更改KrbMethodK5PasswdOn

[Fri Oct 18 17:26:44 2013] [debug] src/mod_auth_kerb.c(1939): [client xxx.xxx.xxx.xxx] kerb_authenticate_user entered with user (NULL) and auth_type Kerberos
[Fri Oct 18 17:26:44 2013] [debug] src/mod_auth_kerb.c(1031): [client xxx.xxx.xxx.xxx] Using HTTP/example.com@REALM.EXAMPLE.COM as server principal for password verification
[Fri Oct 18 17:26:44 2013] [debug] src/mod_auth_kerb.c(735): [client xxx.xxx.xxx.xxx] Trying to get TGT for user jeff@REALM.EXAMPLE.COM
[Fri Oct 18 17:26:44 2013] [debug] src/mod_auth_kerb.c(645): [client xxx.xxx.xxx.xxx] Trying to verify authenticity of KDC using principal HTTP/example.com@REALM.EXAMPLE.COM
[Fri Oct 18 17:26:44 2013] [debug] src/mod_auth_kerb.c(1110): [client xxx.xxx.xxx.xxx] kerb_authenticate_user_krb5pwd ret=0 user=jeff@REALM.EXAMPLE.COM authtype=Basic

我錯過了什麼?我研究了很多線上教程,但找不到 Kerberos 憑據不允許訪問的原因。

在探勘了更多日誌資訊後,我發現客戶端機器沒有正確響應伺服器的票證。您可以在客戶端機器上判斷錯誤的方式是您將看到 Apache 伺服器的錯誤消息“無法驗證 krb5 憑據:在 Kerberos 數據庫中找不到伺服器”。在/etc/krb5.conf客戶端電腦上的文件中,您必須確保 Web 域名映射到正確的 Kerberos 領域:

[domain_realm]
   example.com = REALM.EXAMPLE.COM
   .example.com = REALM.EXAMPLE.COM

如果沒有這個,客戶端將拒絕伺服器,因為Kerberos 票證只能來自明確允許的領域

我希望這些資訊可以幫助其他人!

引用自:https://serverfault.com/questions/547110