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

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