javax.security.sasl

接口
异常
java.lang.Object
  继承者 javax.security.sasl.Sasl

public class Sasl
     
extends Object

用于创建 SASL 客户端和服务器的静态类。

此类定义了如何查找、加载和实例化 SASL 客户端和服务器的策略。

例如,通过执行以下操作,应用程序或库可获得 SASL 客户端:

 SaslClient sc = Sasl.createSaslClient(mechanisms,
     authorizationId, protocol, serverName, props, callbackHandler);
然后该程序可继续使用该实例来创建验证连接。

类似地,服务器可使用下列代码来获得 SASL 服务器:

 SaslServer ss = Sasl.createSaslServer(mechanism,
     protocol, serverName, props, callbackHandler);

从以下版本开始:
1.5

字段摘要
static String CREDENTIALS
          属性的名称,它指定要使用的证书。
static String MAX_BUFFER
          属性名,指定 SaslClient/SaslServer 接收缓冲区的最大大小(以字节为单位)。
static String POLICY_FORWARD_SECRECY
          属性名,指定是否需要在会话间实现了转发安全性的机制。
static String POLICY_NOACTIVE
          属性名,指定是否允许易受主动式攻击(非字典)的机制。
static String POLICY_NOANONYMOUS
          属性名,指定是否允许接受匿名登录的机制。
static String POLICY_NODICTIONARY
          属性名,指定是否允许易受被动式字典攻击的机制。
static String POLICY_NOPLAINTEXT
          属性名,指定是否允许易受简单被动式攻击(例如 "PLAIN")的机制。
static String POLICY_PASS_CREDENTIALS
          属性名,指定是否需要传递客户端证书的机制。
static String QOP
          属性名,指定要使用的保护级别。
static String RAW_SEND_SIZE
          属性名,指定 SaslClient/SaslServer 初始发送缓冲区的最大大小(以字节为单位)。
static String REUSE
          属性名,指定是否重用以前已验证过的会话信息。
static String SERVER_AUTH
          属性名,指定服务器是否必须验证客户端。
static String STRENGTH
          属性名,指定要使用的密码强度。
 
方法摘要
static SaslClient createSaslClient(String[] mechanisms, String authorizationId, String protocol, String serverName, Map<String,?> props, CallbackHandler cbh)
          使用提供的参数创建 SaslClient
static SaslServer createSaslServer(String mechanism, String protocol, String serverName, Map<String,?> props, CallbackHandler cbh)
          为指定机制创建一个 SaslServer
static Enumeration<SaslClientFactory> getSaslClientFactories()
          获得用于生成 SaslClient 的已知工厂的枚举。
static Enumeration<SaslServerFactory> getSaslServerFactories()
          获得用于生成 SaslServer 的已知工厂的枚举。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

字段详细信息

QOP

public static final String QOP
属性名,指定要使用的保护级别。该属性包含一个逗号分隔的、客户端或服务器希望支持的保护级别值的有序列表。保护级别值 (qop) 是下列之一:
  • "auth" - 仅验证
  • "auth-int" - 验证和完整性保护
  • "auth-conf" - 验证、完整性和机密性保护
该列表的顺序指定了客户端或服务器的首选顺序。如果此属性不存在,则默认的保护级别是 "auth"。此常量的值是 "javax.security.sasl.qop"

另请参见:
常量字段值

STRENGTH

public static final String STRENGTH
属性名,指定要使用的密码强度。该属性包含一个逗号分隔的、客户端或服务器希望支持的密码强度值的有序列表。强度值是下列之一:
  • "low"
  • "medium"
  • "high"
该列表的顺序指定了客户端或服务器的首选顺序。实现应该允许配置这些值的含义。应用程序可以使用 Java Cryptography Extension(Java 加密扩展,JCE),借助可使用 JCE 的机制来控制对与该强度值相符的密码套件的选择。
如果此属性不存在,则默认的强度是 "high,medium,low"。此常量的值是 "javax.security.sasl.strength"

另请参见:
常量字段值

SERVER_AUTH

public static final String SERVER_AUTH
属性名,指定服务器是否必须验证客户端。如果服务器必须验证客户端,则该属性包含 "true";否则包含 "false"。默认值为 "false"
此常量的值是 "javax.security.sasl.server.authentication"

另请参见:
常量字段值

MAX_BUFFER

public static final String MAX_BUFFER
属性名,指定 SaslClient/ SaslServer 接收缓冲区的最大大小(以字节为单位)。该属性包含一个整数的字符串表示形式。
如果此属性不存在,则由机制定义默认的大小。
此常量的值是 "javax.security.sasl.maxbuffer"

另请参见:
常量字段值

RAW_SEND_SIZE

public static final String RAW_SEND_SIZE
属性名,指定 SaslClient/ SaslServer 初始发送缓冲区的最大大小(以字节为单位)。该属性包含一个整数的字符串表示形式。验证交换期间在客户端和服务器之间协商此属性的值。
此常量的值是 "javax.security.sasl.rawsendsize"

另请参见:
常量字段值

REUSE

public static final String REUSE
属性名,指定是否重用以前已验证过的会话信息。如果机制实现可以尝试重用以前已验证的会话信息,则该属性包含 "true";如果实现必须不重用以前已验证的会话信息,则该属性包含 "false"。"true" 设置仅用作一个提示:这不一定会实际重用该信息,很多原因都可能导致无法重用,这些原因包括(但不限于)机制不支持重用、可重用的信息已过期和同位体拒绝支持重用。 该属性的默认值是 "false"。此常量的值是 "javax.security.sasl.reuse"。 注意,不管是否提供了此属性,必须提供创建 SASL 客户端/服务器实例所需的所有其他参数和属性。也就是说,如果期望重用该信息,也不能提供较少的其他信息。 支持重用的机制实现可以允许为某些方面自定义其实现,如缓存大小、超时和可重用性标准。这些自定义内容与实现有关。

另请参见:
常量字段值

POLICY_NOPLAINTEXT

public static final String POLICY_NOPLAINTEXT
属性名,指定是否允许易受简单被动式攻击(例如 "PLAIN")的机制。如果不允许这种机制,则该属性包含 "true";如果允许这种机制,则包含 "false"。默认值为 "false"
此常量的值是 "javax.security.sasl.policy.noplaintext"

另请参见:
常量字段值

POLICY_NOACTIVE

public static final String POLICY_NOACTIVE
属性名,指定是否允许易受主动式攻击(非字典)的机制。如果不允许这种易受主动式攻击的机制,则该属性包含 "true";如果允许这种机制,则包含 "false"。默认值为 "false"
此常量的值是 "javax.security.sasl.policy.noactive"

另请参见:
常量字段值

POLICY_NODICTIONARY

public static final String POLICY_NODICTIONARY
属性名,指定是否允许易受被动式字典攻击的机制。如果不允许这种易受字典攻击的机制,则该属性包含 "true";如果允许这种机制,则包含 "false"。默认值为 "false"
此常量的值是 "javax.security.sasl.policy.nodictionary"

另请参见:
常量字段值

POLICY_NOANONYMOUS

public static final String POLICY_NOANONYMOUS
属性名,指定是否允许接受匿名登录的机制。如果不允许这种接受匿名登录的机制,则该属性包含 "true";如果允许这种机制,则包含 "false"。默认值为 "false"
此常量的值是 "javax.security.sasl.policy.noanonymous"

另请参见:
常量字段值

POLICY_FORWARD_SECRECY

public static final String POLICY_FORWARD_SECRECY
属性名,指定是否需要在会话间实现了转发安全性的机制。转发安全性意味着中断一个会话不会自动为中断后续的会话提供信息。如果需要在会话间实现转发安全性的机制,则该属性包含 "true";如果不需要这样的机制,则包含 "false"。默认值为 "false"
此常量的值是 "javax.security.sasl.policy.forward"

另请参见:
常量字段值

POLICY_PASS_CREDENTIALS

public static final String POLICY_PASS_CREDENTIALS
属性名,指定是否需要传递客户端证书的机制。如果需要传递客户端证书的机制,则该属性包含 "true";如果不需要这样的机制,则包含 "false"。默认值为 "false"
此常量的值是 "javax.security.sasl.policy.credentials"

另请参见:
常量字段值

CREDENTIALS

public static final String CREDENTIALS
属性的名称,它指定要使用的证书。该属性包含特定于机制的 Java 证书对象。机制实现可以检查此属性的值,以确定它是否是它们支持的类。该属性可以向支持委托的验证的机制提供证书。
此常量的值为 "javax.security.sasl.credentials"

另请参见:
常量字段值
方法详细信息

createSaslClient

public static SaslClient createSaslClient(String[] mechanisms,
                                          String authorizationId,
                                          String protocol,
                                          String serverName,
                                          Map<String,?> props,
                                          CallbackHandler cbh)
                                   throws SaslException
使用提供的参数创建 SaslClient。 此方法使用 JCA Security Provider Framework(在 "Java Cryptography Architecture API Specification & Reference" 中描述)来查找和选择 SaslClient 实现。 首先,它从 "SaslClientFactory" 服务的已注册安全提供者和指定的 SASL 机制中获得 SaslClientFactory 实例的有序列表。然后它在列表中的每个工厂实例上调用 createSaslClient(),直到某个调用生成一个非 null 的 SaslClient 实例为止。此方法返回非 null 的 SaslClient 实例,如果搜索无法生成非 null 的 SaslClient 实例,则返回 null。

SaslClientFactory 的安全提供者向 JCA Security Provider Framework 注册以下形式的键:
SaslClientFactory.机制名
和值(即 javax.security.sasl.SaslClientFactory 实现的类名)。 例如,一个包含工厂类 com.wiz.sasl.digest.ClientFactory(支持 "DIGEST-MD5" 机制)的提供者将向 JCA 注册以下项:SaslClientFactory.DIGEST-MD5 com.wiz.sasl.digest.ClientFactory

有关如何安装和配置安全服务提供者的信息,请参阅 "Java Cryptography Architecture API Specification & Reference"。

参数:
mechanisms - 要试用的机制名的非 null 列表。每个名称都是 SASL 机制的 IANA 注册名。(例如 "GSSAPI"、"CRAM-MD5")。
authorizationId - 与协议有关可能为 null 的用于授权的标识。如果为 null 或空,则服务器根据客户端的验证证书派生出一个授权 ID。SASL 验证成功完成后,就允许指定的实体访问。
protocol - 非 null 的协议(例如 "ldap")字符串名,将用它执行验证。
serverName - 服务器的非 null 完全限定主机名,要向该服务器进行验证。
props - 可能为 null 的属性集,用于选择 SASL 机制并配置所选机制的验证交换。例如,如果 props 包含 Sasl.POLICY_NOPLAINTEXT 属性,且属性值为 "true",则所选的 SASL 机制必须不易受到简单被动式攻击的影响。除了在此类中所声明的标准属性外,也可以包括其他的可能特定于机制的属性。忽略与所选机制无关的属性,包括带有非字符串关键字的所有映射项。
cbh - SASL 机制使用的回调处理程序(可能为 null),以便为完成验证而从应用程序/库获得更多的信息。例如,SASL 机制可能需要从调用者获得验证 ID、密码和域。使用 NameCallback 来请求验证 ID。使用 PasswordCallback 来请求密码。如果要从域列表中选择,则使用 RealmChoiceCallback 来请求域,如果必须输入域,则使用 RealmCallback 来请求域。
返回:
使用所提供参数创建的 SaslClient,可能为 null。如果为 null,则无法找到可生成 SaslClient 的 SaslClientFactory
抛出:
SaslException - 如果因为错误而无法创建 SaslClient

createSaslServer

public static SaslServer createSaslServer(String mechanism,
                                          String protocol,
                                          String serverName,
                                          Map<String,?> props,
                                          CallbackHandler cbh)
                                   throws SaslException
为指定机制创建一个 SaslServer。 此方法使用 JCA Security Provider Framework(在 "Java Cryptography Architecture API Specification & Reference" 中所有描述)来查找和选择 SaslServer 实现。 首先,它从 "SaslServerFactory" 服务的已注册安全提供者和指定的 SASL 机制中获得 SaslServerFactory 实例的有序列表。然后它在列表中的每个工厂实例上调用 createSaslServer(),直到某个调用生成一个非 null 的 SaslServer 实例为止。此方法返回非 null 的 SaslServer 实例,如果搜索无法生成非 null 的 SaslServer 实例,则返回 null。

SaslServerFactory 的安全提供者向 JCA Security Provider Framework 注册以下形式的键:
SaslServerFactory.机制名
和值(即 javax.security.sasl.SaslServerFactory 实现的类名)。 例如,一个包含工厂类 com.wiz.sasl.digest.ServerFactory(支持 "DIGEST-MD5" 机制)的提供者将向 JCA 注册以下项: SaslServerFactory.DIGEST-MD5 com.wiz.sasl.digest.ServerFactory

有关如何安装和配置安全服务提供者的信息,请参阅 "Java Cryptography Architecture API Specification & Reference"。

参数:
mechanism - 非 null 的机制名。它必须是 SASL 机制的 IANA 注册名。(例如 "GSSAPI"、"CRAM-MD5")。
protocol - 非 null 的协议(例如 "ldap")字符串名,将为它执行验证。
serverName - 服务器的非 null 完全限定主机名。
props - 可能为 null 的属性集,用于选择 SASL 机制并配置所选机制的验证交换。例如,如果 props 包含 Sasl.POLICY_NOPLAINTEXT 属性,且属性值为 "true",则所选的 SASL 机制必须不易受到简单被动式攻击的危害。除了在此类中所声明的标准属性外,也可以包括其他的可能特定于机制的属性。忽略与所选机制无关的属性,包括带有非字符串关键字的所有映射项。
cbh - SASL 机制使用的回调处理程序(可能为 null),以便为完成验证而从应用程序/库获得更多的信息。例如,SASL 机制可能需要从调用者获得验证 ID、密码和域。使用 NameCallback 来请求验证 ID。使用 PasswordCallback 来请求密码。如果要从域列表中选择,则使用 RealmChoiceCallback 来请求域,如果必须输入域,则使用 RealmCallback 来请求域。
返回:
使用所提供参数创建的 SaslServer,可能为 null。如果为 null,则无法找到可生成 SaslServer 的 SaslServerFactory
抛出:
SaslException - 如果因为错误而无法创建 SaslServer

getSaslClientFactories

public static Enumeration<SaslClientFactory> getSaslClientFactories()
获得用于生成 SaslClient 的已知工厂的枚举。此方法使用与 createSaslClient() 相同的查找工厂算法。

返回:
用于生成 SaslClient 的已知工厂非 null 枚举。
另请参见:
createSaslClient(java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.util.Map , javax.security.auth.callback.CallbackHandler)

getSaslServerFactories

public static Enumeration<SaslServerFactory> getSaslServerFactories()
获得用于生成 SaslServer 的已知工厂的枚举。此方法使用与 createSaslServer() 相同的查找工厂算法。

返回:
用于生成 SaslServer 的已知工厂的非 null 枚举,
另请参见:
createSaslServer(java.lang.String, java.lang.String, java.lang.String, java.util.Map , javax.security.auth.callback.CallbackHandler)