JAAS/GSS-API/SASL/Kerberos简介

如果将Kerberos引入到一个分布式系统中提供身份认证与服务授权时,还涉及到一系列与安全有关的框架技术与接口协议,包括:如何对认证的对象或访问的资源进行抽象?应用通过什么样的接口进行Kerberos认证?如何保障跨节点通信时的安全传输?Java Security中均提供了现成的实现。

JAAS

JAAS是Java Authentication and Authorization Service的缩写,提供了认证与授权相关的服务框架与接口定义:

  • 认证:认证主要是验证一个用户的身份。
  • 授权:授权用户访问或操作某些敏感的资源。

前一篇文章<Java认证与授权服务JAAS基础概念>已经做了详细的介绍。

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。

SASL

SASL是Simple Authentication and Security Layer的缩写,主要应用于跨节点通信时的认证与数据加密,如Client与Server基于RPC进行通信时,可以基于SASL来提供身份认证以及数据加密能力。
当SASL中使用Kerberos服务时,也需要使用到GSS-API来与Kerberos之间进行安全信息交换。

Kerberos

回忆一下之前一篇文章<图解Kerberos协议原理>中讲到的Kerberos认证与授权的几个关键步骤:

  1. [Login] 用户输入用户名/密码信息进行登录。
  2. [Client/AS] Client到AS进行认证,获取TGT。
  3. [Client/TGS] Client基于TGT以及Client/TGS Session Key去TGS去获取Service Ticket(Client-To-Server Ticket)。
  4. [Client/Server] Client基于 Client-To-Server Ticket以及Client/Server SessionKey去Server端请求建立连接,该过程Client/Server可相互进行认证。
  5. [Client/Server] 连接建立之后,Client可正常往Server端发送服务请求。

第1步,在Client端完成对密码信息的单向加密。
第2步,基于JAAS进行认证。
第3,4步,则基于GSS-API进行交互。
第4,5步建立连接与发送服务请求的过程,则通常基于SASL框架。

总结

本文主要介绍了在一个分布式系统中引入Kerberos认证时所涉及到的框架技术,简要总结如下:

  • JAAS 认证与授权服务框架与接口定义
  • GSS-API 跨应用程序之间的安全信息交换,如Kerberos授权时Client与TGS/SS之间的信息交换。
  • SASL 主要应用于跨节点通信时的认证与数据加密。

References

  1. Introduction to JAAS and Java GSS-API Tutorials
  2. Use of JAAS Login Utility and Java GSS-API for Secure Message Exchanges
  3. Use of Java GSS-API for Secure Message Exchanges Without JAAS Programming
  4. The Java SASL API: Programming and Deployment Guide

本文源自:NoSQL漫谈(nosqlnotes.com)
除非特别注明,本站文章均为原创,转载请注明出处和链接。

One comment

Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注