通用安全服务应用程序接口(GSSAPI) 是为了让程序能够访问安全服务的一个应用程序接口。
使用 GSS-API,程序员在编写应用程序时,可以应用通用的安全机制。开发者不必针对任何特定的平台、安全机制、保护类型或传输协议来定制安全实现。使用 GSS-API,程序员可忽略保护网络数据方面的细节。使用 GSS-API 编写的程序在网络安全方面具有更高的可移植性。这种可移植性是通用安全服务 API 的一个特点。
GSS-API 是一个以通用方式为调用者提供安全服务的框架。许多底层机制和技术(如 Kerberos v5 或公钥技术)都支持 GSS-API 框架,如下图所示。
图 4-1 GSS-API 层
从广义上讲,GSS-API 主要具有以下两种功能:
- GSS-API 可创建一个安全上下文,应用程序可在该上下文中相互传递数据。上下文是指两个应用程序之间的信任状态。由于共享同一个上下文的应用程序可相互识别,因此可以允许在上下文存在期间进行数据传送。
- GSS-API 可向要传送的数据应用一种或多种类型的保护,称为安全服务。GSS-API 中的安全服务介绍了安全服务。
此外,GSS-API 还可执行以下功能:
- 转换数据
- 检查错误
- 授予用户特权
- 显示信息
- 比较标识
GSS-API 中包括许多支持函数和便利函数。
使用 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。
GSS-API 中的安全服务
GSS-API 提供了三种类型的安全服务:
- 验证-验证是 GSS-API 提供的基本安全性。验证是指对身份进行验证。如果用户通过了验证,则系统会假设其有权以该用户名进行操作。
- 完整性-完整性是指对数据的有效性进行验证。即使数据来自有效用户,数据本身也可能会损坏或遭到破坏。完整性可确保消息与预期的一样完整(未增减任何内容)。GSS-API 提供的数据附带有一个名为消息完整性代码 (Message Integrity Code, MIC) 的加密标记。MIC 可用于证明收到的数据与发送者所传送的数据是否相同。
- 保密性-保密性可确保拦截了消息的第三方难以阅读消息内容。验证和完整性机制都不会修改数据。如果数据由于某种原因而被拦截,则其他人可以阅读该数据。因此,可通过 GSS-API 对数据进行加密,前提是提供了支持加密的基础机制。这种数据加密称为保密性。
GSS-API 中的可用机制
当前的 GSS-API 实现可使用以下机制:Kerberos v5、Diffie-Hellman 和 SPNEGO。有关 Kerberos 实现的更多信息,请参见《系统管理指南:安全性服务》中的第 21 章 “Kerberos 服务介绍”。如果任何系统上运行了能够识别 GSS-API 的程序,则应在该系统上安装和运行 Kerberos v5。
使用 GSS-API 的远程过程调用
针对网络应用程序使用 RPC(Remote Procedure Call,远程过程调用)协议的程序员可以使用 RPCSECGSS 来提供安全性。RPCSEC_GSS 是位于 GSS-API 上面的一个独立层。RPCSEC_GSS 可提供 GSS-API 的所有功能,但其方式是针对 RPC 进行了调整的。实际上,RPCSC_GSS 可用于向程序员隐藏 GSS-API 的许多方面,从而使 RPC 安全性具有更强的可访问性和可移植性。有关 RPCSEC_GSS 的更多信息,请参见[《ONC+ Developer’s Guide》_中的 “Authentication Using RPCSEC_GSS”](http://www.oracle.com/pls/topic/lookup?ctx=E18752&id=ONCDGadvrpcpt-98)。
下图说明了 RPCSEC_GSS 层在应用程序和 GSS-API 之间的位置。
图 4-2 RPCSEC_GSS 和 GSS-API
GSS-API 的限制
虽然 GSS-API 使数据保护变得很简单,但是它回避某些任务的做法并不符合 GSS-API 的一般本性。因此,GSS-API 不执行以下活动:
- 为用户或应用程序提供安全凭证。凭证必须由基础安全机制提供。GSS-API 确实允许应用程序自动或显式获取凭证。
- 在应用程序之间传送数据。应用程序负责处理对等应用程序之间的所有数据传送,无论数据是与安全有关的数据还是明文数据。
- 区分不同类型的传送数据。例如,GSS-API 无法识别数据包是明文数据还是经过加密的数据。
- 指示由于异步错误而导致的状态。
- 缺省情况下保护多进程程序的不同进程之间已发送的信息。
- 分配要传递到 GSS-API 函数的字符串缓冲区。请参见GSS-API 中的字符串和类似数据。
- 解除分配 GSS-API 数据空间。此内存必须通过 gss_release_buffer() 和 gss_delete_name() 等函数显式解除分配。
GSS-API 的语言绑定
本文档目前仅介绍 GSS-API 的 C 语言绑定,即函数和数据类型。现已推出 Java 绑定版本的 GSS-API。Java GSS-API 包含通用安全服务应用编程接口 (Generic Security Service Application Program Interface, GSS-API) 的 Java 绑定,如 RFC 2853 中所定义。
https://blog.csdn.net/whatday/article/details/104427027