網站的 Kerberos 和 signle-sign-on
我有一個使用 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 設置更改
KrbMethodK5Passwd
為On
:[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 票證只能來自明確允許的領域。
我希望這些資訊可以幫助其他人!