JAAS/GSS-API/SASL/Kerberos简介

# JAAS/GSS-API/SASL/Kerberos简介

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

JAAS

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

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

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

2. 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。

2.1 使用 GSS-API 的应用程序的可移植性

GSS-API 为应用程序提供了以下几种类型的可移植性:

  • 机制无关性。GSS-API 提供了一个用于实现安全性的通用接口。通过指定缺省的安全机制,应用程序无需了解要应用的机制以及该机制的任何详细信息。

  • 协议无关性。GSS-API 与任何通信协议或协议套件均无关。例如,GSS-API 可用于使用套接字、RCP 或 TCP/IP 的应用程序。

    RPCSEC_GSS 是用于将 GSS-API 与 RPC 顺利集成的附加层。有关更多信息,请参见使用 GSS-API 的远程过程调用

  • 平台无关性。GSS-API 与运行应用程序的操作系统的类型无关。

  • 保护质量无关性。保护质量 (Quality of Protection, QOP) 是指一种算法类型,用于加密数据或生成加密标记。通过 GSS-API,程序员可使用 GSS-API 所提供的缺省设置忽略 QOP。另一方面,应用程序可以根据需要指定 QOP。

2.2 GSS-API 中的安全服务

GSS-API 提供了三种类型的安全服务:

  • 验证-验证是 GSS-API 提供的基本安全性。验证是指对身份进行验证。如果用户通过了验证,则系统会假设其有权以该用户名进行操作。

  • 完整性-完整性是指对数据的有效性进行验证。即使数据来自有效用户,数据本身也可能会损坏或遭到破坏。完整性可确保消息与预期的一样完整(未增减任何内容)。GSS-API 提供的数据附带有一个名为消息完整性代码 (Message Integrity Code, MIC) 的加密标记。MIC 可用于证明收到的数据与发送者所传送的数据是否相同。

  • 保密性-保密性可确保拦截了消息的第三方难以阅读消息内容。验证和完整性机制都不会修改数据。如果数据由于某种原因而被拦截,则其他人可以阅读该数据。因此,可通过 GSS-API 对数据进行加密,前提是提供了支持加密的基础机制。这种数据加密称为保密性。

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 主要应用于跨节点通信时的认证与数据加密。

猜你喜欢

转载自blog.csdn.net/qq_21383435/article/details/93366645