Kerberos的那些報錯彙總 原

案例一:多線程訪問啓用了Kerberos的服務報錯

情景:有一個採用了Kerberos認證的web服務,使用Jmeter對其進行壓測,在web的日誌裏看到如下報錯

錯誤如下GSSException: Failure unspecified at GSS-API level (Mechanism level: Request is a replay (34)) Caused by: KrbException: Request is a replay (34)

錯誤原因:當有 多個 客戶端使用 同一principal 同時 向KDC請求認證的時候,Kerberos在 同一時間 能且僅能允許 一個 客戶端通過認證!

這樣就導致其他線程的連接是無法通過認證的,因而拋出上面的異常。所以在有大量需授權的任務的時候,最好每臺機器使用不同的principal,避免多線程使用同一principal請求。

案例二: 證書已過期

錯誤如下GSSException: Failure unspecified at GSS-API level (Mechanism level: Specified version of key is not available (44))

錯誤原因:當前的keytab證書無效,keytab裏存儲的key已過期,這個通常是因爲在KDC裏重新導出過證書,而在導出證書的時候重新生成了密鑰,需要把新的keytab文件拷貝過來重新kinit,或者導出證書的時候加上 -norandkey

案例三:沒有證書

錯誤如下GSS initiate failed

錯誤原因:運行程序或請求服務時沒有執行kinit操作,或程序裏沒有使用keytab和principal進行login

案例四:服務請求中沒有證書

錯誤如下GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]; Host Details : local host is: "node2.xxx.com/172.21.0.189"; destination host is: "node1.xxx.com":8020;

錯誤原因:這個跟案例三的錯誤是一樣的,都屬於是沒有證書,但是這裏的更詳細,我們需要學會去看到底是哪出了問題。從Host Details可以看出是node2向node3發起請求的時候認證不通過,那麼說明是node2上沒有證書,其次請求的端口是8020,由此可以看出是請求的HDFS服務,因爲可以很快定位出問題在哪

案例五:時間不同步

錯誤如下GSSException: ClockSkew,這個錯誤由於當時沒記下來,只記得這個clockskew的關鍵詞,所以不完整

錯誤原因:從關鍵詞可以看出,是時鐘傾斜了,說明客戶端和服務端的時間是不同步的,Kerberos有一個可允許的時間差,機器時間超過這個設定的時間差就會報錯,把時間進行同步就好了

歡迎閱讀轉載,轉載請註明出處:https://my.oschina.net/u/2539801/blog/1511055

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