HDFSRPC安全认证Kerberos篇推广
本文主要阐述HDFSRPC安全认证相关的实现。主要介绍Kerberos相关的实现。
写在前面
相关blog可以先看一下
https://segmentfault.com/a/1190000039085046?sort=newest
https://blog.csdn.net/qq_35995514/article/details/106348765
https://blog.csdn.net/S1124654/article/details/128791481
Rpc安全认证
Rpc安全认证使用的是sasl框架,sasl框架本身无认证相关的实现,认证实现使用的Kerberos。SASL: 在jdk中定义的一种通用的基于客户端和服务端的认证框架,GSSAPI是其实现之一。
GSSAPI: 在jdk中,作为对kerberos认证实现的一部分。
Kerberos: 一种基于中心认证服务器的中心化认证协议和框架。应用程序访问服务前需使用此框架进行登录认证,以在应用程序之间形成动态可控的受信。中心化登录服务器称为KDC。
Krb5LoginModule: 在jdk中,负责从KDC获取登录凭证,是kerberos认证实现的一部分。
SASL
简单认证与安全层(Simple Authentication And Security Layer)是一个在网络协议中用来认证和数据加密的框架。它把认证机制从程序中分离开,理论上使用SASL的程序协议都可以使用SASL所支持的全部认证机制(token认证就是其中的一种认证机制)。
认证机制可支持代理认证,这让一个用户可以承担另一个用户的认证。
SASL同样提供数据安全层,这提供了数据完整验证和数据加密,例如DIGEST_MD5提供了数据加密层。
SASL是一种challenge-response的协议,由服务端发送challenge到客户端,客户端基于challenge发送response,这种交互直到服务端被满足并且不再发布新的challenge。
challenge和对应的response都是任意长度的二进制数据。其大概流程如下所示:
要注意一点sasl是一种框架,不涉及具体实现,通信时可以自己定义相关的包。
Hdfs中sasl相关实现
Negotiate:
client会发送一个saslMessage给server,其中saslstate为Negotiate,无其他信息。Server接收到Negotiate请求后,会返回一个Negotiate的saslMessage,其中包含sasl使用需要使用哪种协议,例如:
auths {
method: "KERBEROS"
mechanism: "GSSAPI"
protocol: "root"
serverId: "node17"
}
Initiate:
client接收到Server的Negotiate的saslMessage后,会根据相关的信息,初始化saslClient,并产生一个Token,发送一个saslstate为Initiate的saslMessage给server。Server接收到saslMessage以后,同样会初始化saslServer,然后evaluate token,生成新的token,返回一个saslstate为challenge的saslMessage给client。
Response-challenge:
client接收到Server的challenge的saslMessage后,会evaluate challenge token,产生一个新的token,然后发送一个saslstate为Response的saslMessage给server。。Server接收到saslMessage以后,然后evaluate token,生成新的token,如果server已经完成初始化,返回一个saslstate为success的saslMessage给client,反之则返回一个saslstate为challenge的saslMessage给client。Client接收如果为challenge的saslMessage则重复上述流程,反之如果接收到success则完成client的初始化。一般这个过程会经过两轮。
继续阅读请点击阅读原文
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理