1. 前言
如果将Kerberos
引入到一个分布式系统中提供身份认证与服务授权时,还涉及到一系列与安全有关的框架技术与接口协议,包括:如何对认证的对象或访问的资源进行抽象?应用通过什么样的接口进行Kerberos
认证?如何保障跨节点通信时的安全传输?Java Security
中均提供了现成的实现。
2. JAAS
JAAS
是Java Authentication and Authorization Service
的缩写,提供了认证与授权相关的服务框架与接口定义:
认证
:认证主要是验证一个用户的身份。授权
:授权用户访问或操作某些敏感的资源。
具体可参考:<Java认证与授权服务JAAS基础概念>。
3. GSS-API
Java GSS-API
是 Generic Security Services Application Program Interface
的缩写,主要应用于跨应用程序之间的安全信息交换(secure message exchanges
), RFC 2853
提供了详细的接口协议定义。应用程序可以通过GSS-API
访问Kerberos
服务。
JAAS
的认证请求,通常先于GSS-API
的调用。也就是说,先通过JAAS
的接口完成登录认证,而后通过GSS-API
来确保后面交换信息的安全性。两者经常被联合一起使用,但也可以单独使用,例如,基于JAAS
也可以完成一些简单的认证与授权,一些别的场景下,也可以只使用GSS-API
而不使用JAAS
。
4. SASL
SASL
是Simple Authentication and Security Layer
的缩写,主要应用于跨节点通信时的认证与数据加密,如Client
与Server
基于RPC
进行通信时,可以基于SASL
来提供身份认证以及数据加密能力。
当SASL
中使用Kerberos
服务时,也需要使用到GSS-API
来与Kerberos
之间进行安全信息交换。
5. Kerberos
回忆一下之前一篇文章<图解Kerberos协议原理>中讲到的Kerberos
认证与授权的几个关键步骤:
[Login]
用户输入用户名/密码信息进行登录。[Client/AS]
Client到AS进行认证,获取TGT。[Client/TGS]
Client基于TGT以及Client/TGS Session Key去TGS去获取Service Ticket(Client-To-Server Ticket)。[Client/Server]
Client基于 Client-To-Server Ticket以及Client/Server SessionKey去Server端请求建立连接,该过程Client/Server可相互进行认证。[Client/Server]
连接建立之后,Client可正常往Server端发送服务请求。
具体步骤说明:
- 第1步,在
Client
端完成对密码信息的单向加密。 - 第2步,基于
JAAS
进行认证。 - 第3,4步,则基于
GSS-API
进行交互。 - 第4,5步建立连接与发送服务请求的过程,则通常基于SASL框架。
6. 总结
本文主要介绍了在一个分布式系统中引入Kerberos
认证时所涉及到的框架技术,简要总结如下:
JAAS
认证与授权服务框架与接口定义GSS-API
跨应用程序之间的安全信息交换,如Kerberos
授权时Client
与TGS/SS
之间的信息交换。SASL
主要应用于跨节点通信时的认证与数据加密。