通用安全服务应用程序编程接口(Generic Security Service Application Program Interface),也叫GSSAPI或GSS-API,以一种统一的模式为使用者提供机制无关,平台无关,程序语言环境无关,可移植的安全服务。程序员在编写应用程序时,可以应用通用的安全机制。开发者不必针对任何特定的平台、安全机制、保护类型或传输协议来定制安全实现。使用 GSS-API,程序员可忽略保护网络数据方面的细节。使用 GSS-API 编写的程序在网络安全方面具有更高的可移植性。这种可移植性是通用安全服务 API 的一个特点。
GSS-API 是一个以通用方式为调用者提供安全服务的框架。许多底层机制和技术(如 Kerberos v5 或公钥技术)都支持 GSS-API 框架,如下图所示:
图1 GSS-API层次关系
GSS-API并不提供任何的安全机制,而是由安全机制提供方在实现安全的机制的基础上,实现GSS-API接口规范(通常是随着安全软件一同安装的库文件)。从而向应用程序编写者提供独立于安全机制提供方的GSS-API,这样,如果改变了底层安全机制(同样是实现了GSS-API规范的),那么应用不需要做任何改变。
以下主要讲述GSS-API的工作原理,功能,可移植性,提供的安全服务,可用的机制以及语言绑定等
前边说过GSS-API并不提供任何安全机制,而是由第三方提供的,GSS-API的最显著功能是交换跟上层应用程序透明的加密消息(tokens)。应用程序的客户端和服务器端负责传送被各自GSS-API实现所分配的tokens。由于GSS-API的底层安全机制本身提供消息加密,所以GSS-API tokens可以在不安全的网络环境下进行传输。在交换一定数量的tokens之后,客户端和服务器端的GSS-API实现便会通知各自的本地应用程序说安全上下文(security context)已经建立。
一旦安全上下文(security context)建立,敏感的应用程序消息便能被客户端和服务器端的GSS-API加密,GSS-API提供的典型保护方式包括保密(secrecy)和认证(authenticity)。GSS-API还可以提供用于远程用户和主机认证的本地保障。
GSS-API还包含一个诊断的伪机制(pseudo mechanism)——SPNEGO,它用于发现新的安全机制,并用其验证,具体的细节,请看我的博客
2. GSS-API 可向要传送的数据应用一种或多种类型的保护,称为安全服务
3. 装换数据
4. 检查错误
5. 授予用户特权
6. 显示信息
7. 比较标识
1. 机制无关性。GSS-API 提供了一个用于实现安全性的通用接口。通过指定缺省的安全机制,应用程序无需了解要应用的机制以及该机制的任何详细信息。
2. 协议无关性。GSS-API 与任何通信协议或协议套件均无关。例如,GSS-API 可用于使用套接字、RCP 或 TCP/IP 的应用程序。
3. 平台无关性。GSS-API 与运行应用程序的操作系统的类型无关
4. 保护质量无关性。保护质量 (Quality of Protection, QOP) 是指一种算法类型,用于加密数据或生成加密标记。通过 GSS-API,程序员可使用 GSS-API 所提供的缺省设置忽略 QOP。另一方面,应用程序可以根据需要指定 QOP。
1. 验证-验证是 GSS-API 提供的基本安全性。验证是指对身份进行验证。如果用户通过了验证,则系统会假设其有权以该用户名进行操作。
2. 完整性-完整性是指对数据的有效性进行验证。即使数据来自有效用户,数据本身也可能会损坏或遭到破坏。完整性可确保消息与预期的一样完整(未增减任何内容)。GSS-API 提供的数据附带有一个名为消息完整性代码 (Message Integrity Code, MIC) 的加密标记。MIC 可用于证明收到的数据与发送者所传送的数据是否相同。
3. 保密性-保密性可确保拦截了消息的第三方难以阅读消息内容。验证和完整性机制都不会修改数据。如果数据由于某种原因而被拦截,则其他人可以阅读该数据。因此,可通过 GSS-API 对数据进行加密,前提是提供了支持加密的基础机制。这种数据加密称为保密性。
1. Kerberos v5
2. Diffie-Hellman
3. SPNEGO(伪机制)
1. C语言绑定
2. Java语言绑定(jGSS)--请看我的博客——【Java安全体系】GSS-API之Java语言绑定(jgss)
Kerberos是一种GSS-API的底层安全机制,也即它实现了安全机制同时实现了GSS-API规范定义的接口。可以认为Kerberos实现了GSS-API(实际上Kerberos还有自身的一些功能)
本文介绍了GSS-API的基本概念,并且讲述了GSS-API可以提供的几种功能和服务,然后讲解了GSS-API的语言绑定以及与Kerberos的关系。你可以通过本文了解到GSS-API的一般模式和基本概念。