本文主要阐述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的初始化。一般这个过程会经过两轮。
继续阅读请点击阅读原文
标签:saslstate,saslMessage,challenge,Kerberos,认证,HDFSRPC,token,client From: https://www.cnblogs.com/zfpigpig/p/18082079