java证书过期时间_Java登录Kerberos认证过期问题

本文介绍了JavaWeb应用在使用Kerberos认证时遇到的凭证过期问题,导致查询Hbase失败。源码调试发现Ticket的到期时间未更新。解决思路包括定期刷新凭证或增加凭证有效期。最终采取定时调用`checkTGTAndReloginFromKeytab()`方法更新凭证,确保应用能持续正常运行。
摘要由CSDN通过智能技术生成

问题:

最近CDH集群增加了kerberos认证,发现了JavaWeb应用启动后,超过24小时后,kerberos凭证过期导致查询Hbase失败的问题。

439e723cbd6d5b8b3a8426f674d27f87.png

Spark程序连接CDH时,通过principal和keytab配置方式,内部会将凭证到hdfs上,供Executor和Driver使用。当凭证Ticket快要失效时,会通过Keytab重新生成凭证。

spark2-submit \

--master yarn \

--deploy-mode cluster \

--num-executors 3 \

--driver-memory 4g \

--executor-memory 4g \

--executor-cores 2 \

--conf spark.default.parallelism=10 \

--conf spark.shuffle.file.buffe=1024k \

--conf spark.executor.memoryOverhead=4096 \

--class com.hypers.streaming.PanoramaMain \

--conf "spark.executor.extraJavaOptions=-verbose:gc -XX:+PrintGCDetails" \

--principal xxxx \

--keytab xxxx.keytab \

xxxx.jar

但我们自己开发的JavaWeb服务没有该机制,导致Ticket在程序运行时过期失效,最终查询Hbase时提示没有有效凭证,查询失败。

源码调试:

本地调试源码验证后,发现确实是因为Ticket的到期时间每次启动时候都会指定成一个固定的时间,后续也没有进行更新,最终过期导致应用查询Hbase失败。

重新编译了源码,增加了Ticket凭证相关的日志,最终确认了问题就是Ticket没有更新到期有效时间,导致认证过期。打印的日志如下:

checkTGTAndReloginFromKeytab! shouldRenewImmediatelyForTests:false, Time.now():1606492834061, getRefreshTime(tgt):1606526141000, tgt:Ticket (hex) =

0000: 61 82 01 40 30 82 01 3C A0 03 02 01 05 A1 0D 1B a..@0..<........>

0010: 0B 45

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值