java.lang.Object
javax.security.auth.kerberos.KerberosKey
- 所有已实现的接口:
-
Serializable
,Key
,SecretKey
,Destroyable
此类封装了Kerberos主体的长期密钥。
一个KerberosKey
对象包括一个EncryptionKey,一个KerberosPrincipal
作为其所有者,以及密钥的版本号。
EncryptionKey在Kerberos协议规范的第4.2.9节中定义为:
EncryptionKey ::= SEQUENCE { keytype [0] Int32 -- 实际上是加密类型 --, keyvalue [1] OCTET STRING }一个
KerberosKey
的密钥材料被定义为上述keyValue
的值。
所有获取主体密码并从中生成密钥的Kerberos JAAS登录模块应该使用这个类。有时,例如在缺少用户对用户认证的情况下对服务器进行身份验证时,登录模块将在认证过程的提交阶段将此类的实例存储在Subject
的私有凭据集中。
使用keytab读取密钥的Kerberos服务应该使用KeyTab
类,在需要时可以读取最新的密钥。
如果应用程序需要从Subject访问KerberosKey
实例,则可能需要被授予PrivateCredentialPermission
。当应用程序依赖于默认的JGSS Kerberos机制访问KerberosKey
时,不需要此权限。但在这种情况下,应用程序将需要适当的ServicePermission
。
使用KerberosKey(KerberosPrincipal, char[], String)
构造函数创建KerberosKey
时,实现可能接受非IANA算法名称(例如,"ArcFourMac"代表"rc4-hmac"),但getAlgorithm()
方法必须始终返回IANA算法名称。
- 实现注意:
-
为了兼容性原因,在此实现中,
KerberosKey(KerberosPrincipal, char[], String)
构造函数支持JDK 9之前使用的旧算法名称,包括"DES"(和null)代表"des-cbc-md5","DESede"代表"des3-cbc-sha1-kd","ArcFourHmac"代表"rc4-hmac","AES128"代表"aes128-cts-hmac-sha1-96",以及"AES256"代表"aes256-cts-hmac-sha1-96"。 - 自 JDK 版本:
- 1.4
- 参见:
-
Constructor Summary
ConstructorDescriptionKerberosKey
(KerberosPrincipal principal, byte[] keyBytes, int keyType, int versionNum) 从已知密钥类型和密钥版本号的字节构造一个KerberosKey
。KerberosKey
(KerberosPrincipal principal, char[] password, String algorithm) 使用指定的算法名称从主体密码构造一个KerberosKey
。 -
Method Summary
Modifier and TypeMethodDescriptionvoid
destroy()
通过清除此密钥的密钥材料来销毁此密钥。boolean
将指定的对象与此KerberosKey
进行比较以判断是否相等。final String
返回此密钥的标准算法名称。final byte[]
返回此密钥的密钥材料。final String
返回此密钥的编码格式名称。final int
返回此长期密钥的密钥类型。final KerberosPrincipal
返回此密钥所属的主体。final int
返回密钥版本号。int
hashCode()
返回此KerberosKey
的哈希码。boolean
确定此密钥是否已被销毁。toString()
返回此KerberosKey
的信息性文本表示。
-
Constructor Details
-
KerberosKey
从已知密钥类型和密钥版本号的字节构造一个KerberosKey
。当从Kerberos“keytab”中读取密钥信息时可以使用此方法。- 参数:
-
principal
- 此秘密密钥所属的主体 -
keyBytes
- 用于秘密密钥的密钥材料 -
keyType
- 根据Kerberos协议规范定义的秘密密钥的密钥类型 -
versionNum
- 此秘密密钥的版本号
-
KerberosKey
使用指定的算法名称从主体密码构造一个KerberosKey
。算法名称(不区分大小写)应作为IANAKerberos加密类型编号页面上定义的加密类型字符串提供。生成的密钥的版本号将为0。- 参数:
-
principal
- 此密码所属的主体 -
password
- 用于计算密钥的密码 -
algorithm
- 此密钥将用于的算法名称 - 抛出:
-
IllegalArgumentException
- 如果传递的算法名称不受支持
-
-
Method Details
-
getPrincipal
返回此密钥所属的主体。- 返回:
- 此密钥所属的主体。
- 抛出:
-
IllegalStateException
- 如果密钥已被销毁
-
getVersionNumber
public final int getVersionNumber()返回密钥版本号。- 返回:
- 密钥版本号。
- 抛出:
-
IllegalStateException
- 如果密钥已被销毁
-
getKeyType
public final int getKeyType()返回此长期密钥的密钥类型。- 返回:
- 密钥类型。
- 抛出:
-
IllegalStateException
- 如果密钥已被销毁
-
getAlgorithm
返回此密钥的标准算法名称。算法名称是在IANAKerberos加密类型编号页面上定义的加密类型字符串。此方法可能返回以下未在IANA页面上定义的值:
- none: 对于etype等于0
- unknown: 对于etype大于0但不受实现支持
- private: 对于etype小于0
- 指定者:
-
getAlgorithm
在接口Key
中 - 返回:
- 与此密钥关联的算法名称。
- 抛出:
-
IllegalStateException
- 如果密钥已被销毁
-
getFormat
返回此秘密密钥的编码格式名称。- 指定者:
-
getFormat
在接口Key
中 - 返回:
- 字符串"RAW"
- 抛出:
-
IllegalStateException
- 如果密钥已被销毁
-
getEncoded
public final byte[] getEncoded()返回此秘密密钥的密钥材料。- 指定者:
-
getEncoded
在接口Key
中 - 返回:
- 密钥材料
- 抛出:
-
IllegalStateException
- 如果密钥已被销毁
-
destroy
通过清除此秘密密钥的密钥材料来销毁此密钥。- 指定者:
-
destroy
在接口Destroyable
中 - 抛出:
-
DestroyFailedException
- 如果销毁此密钥时发生错误
-
isDestroyed
public boolean isDestroyed()确定此密钥是否已被销毁。- 指定者:
-
isDestroyed
在接口Destroyable
中 - 返回:
-
如果此
Object
已被销毁,则为true;否则为false。
-
toString
返回此KerberosKey
的信息性文本表示。 -
hashCode
public int hashCode()返回此KerberosKey
的哈希码。 -
equals
将指定的对象与此KerberosKey
进行比较以检查是否相等。 如果给定对象也是一个KerberosKey
并且两个KerberosKey
实例是等价的,则返回true。 一个已销毁的KerberosKey
对象只等于它自己。
-