Windows下配置瀏覽器使用Kerberos (SPNEGO)
目錄:
適用場景
本示例適用場景滿足以下情況:
1. 訪問開啓kerberos的hadoop集羣WebUI界面,如ResourceManager、NameNode、Hive等
2. 其他通過Kerberos (SPNEGO)實現HTTP驗證的頁面
3. windows環境
4. Firefox瀏覽器
Windows GSSAPI/KERBEROS環境配置
在windows端實現kerberos(SPNEGO)的驗證,需要讓瀏覽器能找到其對應的kerberos/gssapi類庫(gssapi64.dll/gssapi32.dll等)
和對應的配置文件,其中配置文件的默認如下:
操作系統 | 缺省位置 |
---|---|
Windows | c:\winnt\krb5.ini |
Linux | /etc/krb5.conf |
其他基於 UNIX 的系統 | /etc/krb5/krb5.conf |
z/OS | /etc/krb5/krb5.conf |
Note: 如果 krb5.ini 文件不在 c:\winnt 目錄中,那麼它可能位於 c:\windows 目錄中。
可以通過環境變量進行自定義配置參數的設置,也可以通過修改瀏覽器的參數進行設置,如在火狐中可通過訪問about:config
頁面進行參數調整:
network.negotiate-auth.gsslib
network.negotiate-auth.using-native-gsslib
……
由於對應的項比較繁瑣,可以通過安裝MIT KERBEROS進行默認情況的安裝簡化配置:
安裝MIT KERBEROS
windows使用的kerberos客戶端叫KFW,當前最新版本爲KFW 4.1(64)/KFW 4.1(32),也可以通過訪問KFW 下載列表 獲得版本列表進行選擇下載。以下以64位環境舉例,32位環境請對照替換關鍵目錄,如Program Files
替換爲Program Files(x86)
:
安裝完成後會進行默認的PATH環境變量配置,將安裝目錄下的bin目錄配置進去,安裝完成後可以校驗一下。默認情況會安裝到C:\Program Files\MIT\Kerberos
路徑,同時在C:\ProgramData\MIT\Kerberos5
路徑下生成kerberos的配置文件krb5.ini
。
PS: 爲保險起見,可以同步替換c:\winnt\或c:\windows\下的krb5.ini
配置kerberos環境
將集羣上kdc相關的配置文件krb5.conf中的內容同步到krb5.ini中,然後啓動MIT Kerberos
將用戶名principal和密碼輸入,驗證通過後獲取Ticket:
配置JCE
由於kerberos校驗和加解密用到密鑰長度遠超出jre默認的安全字符長度,所以需要到java官網上下載Java Cryptography Extension (JCE),然後解壓到%JAVA_HOME%/jre/lib/security中替換相應的文件。
配置Firefox
windows下Firefox需要通過訪問about:config
頁面調整以下參數:
1. network.negotiate-auth.trusted-uris 允許使用gssapi鏈接驗證的地址
2. network.auth.use-sspi 關閉sspi驗證協議
3. network.negotiate-auth.delegation-uris 代理委託地址,不建議使用
其中參數1或3在各類官方文檔均有記載,參數3是代理時才使用,同時由於安全性可靠性考慮不推薦,而參數2則是windows各種方便使用的默認配置的坑:windows下的Firefox自帶sspi這個安全認證協議,而且優先度很高,linux及其他環境下則多沒有,因此Firefox在配置network.negotiate-auth.trusted-uris
仍然會優先使用sspi協議進行安全驗證,導致出現出現如下報錯信息(JCE未升級也會報下面的錯):
HTTP ERROR: 403
Problem accessing /index.html. Reason:
GSSException: Defective token detected (Mechanism level: GSSHeader did not find the right tag)
Powered by Jetty://
後談
登錄成功後可以通過瀏覽器打開對應的頁面,同時在MIT Kerberos中也可以看到出現了除krbtgt以外的歸屬於HTTP的一條新ticket:
另外Firefox報錯很不明顯,可以通過如下方式打開調試模式打印報錯內容:
Firefox 的調試日誌:
set NSPR_LOG_MODULES=negotiateauth:5
set NSPR_LOG_FILE=c:\firefox_in_domain_negotiateauth.log
...\firefox.exe -console
set NSPR_LOG_MODULES=all:5
set NSPR_LOG_FILE=c:\firefox_in_domain_debug.log
...\firefox.exe -console
小結
- windows的向後兼容和自定製優化功能很強大,但是有些時候會變成配置阻礙
- 瞭解不全的時候只通過單個專業信息搜查資料不一定能解決問題
參考鏈接:
- https://hg.mozilla.org/mozilla-central/file/fd2da289a3c1/extensions/auth
- https://hg.mozilla.org/mozilla-central/annotate/fd2da289a3c1/extensions/auth/nsAuthGSSAPI.cpp
- https://developer.mozilla.org/En/Integrated_Authentication
- https://developer.mozilla.org/en/Mozilla_Source_Code_Directory_Structure
- https://www.ibm.com/support/knowledgecenter/zh/SSAW57_8.5.5/com.ibm.websphere.nd.multiplatform.doc/ae/rsec_SPNEGO_config_krb5.html