Windows下配置瀏覽器使用Kerberos (SPNEGO)

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
MIT Kerberos
將用戶名principal和密碼輸入,驗證通過後獲取Ticket:
Get Ticket
KFW界面

配置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

小結

  1. windows的向後兼容和自定製優化功能很強大,但是有些時候會變成配置阻礙
  2. 瞭解不全的時候只通過單個專業信息搜查資料不一定能解決問題

參考鏈接:

  1. https://hg.mozilla.org/mozilla-central/file/fd2da289a3c1/extensions/auth
  2. https://hg.mozilla.org/mozilla-central/annotate/fd2da289a3c1/extensions/auth/nsAuthGSSAPI.cpp
  3. https://developer.mozilla.org/En/Integrated_Authentication
  4. https://developer.mozilla.org/en/Mozilla_Source_Code_Directory_Structure
  5. https://www.ibm.com/support/knowledgecenter/zh/SSAW57_8.5.5/com.ibm.websphere.nd.multiplatform.doc/ae/rsec_SPNEGO_config_krb5.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章