Class KerberosKey

java.lang.Object
javax.security.auth.kerberos.KerberosKey
所有已实现的接口:
Serializable, Key, SecretKey, Destroyable

public class KerberosKey extends Object implements SecretKey
此类封装了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 Details

    • KerberosKey

      public KerberosKey(KerberosPrincipal principal, byte[] keyBytes, int keyType, int versionNum)
      从已知密钥类型和密钥版本号的字节构造一个KerberosKey。当从Kerberos“keytab”中读取密钥信息时可以使用此方法。
      参数:
      principal - 此秘密密钥所属的主体
      keyBytes - 用于秘密密钥的密钥材料
      keyType - 根据Kerberos协议规范定义的秘密密钥的密钥类型
      versionNum - 此秘密密钥的版本号
    • KerberosKey

      public KerberosKey(KerberosPrincipal principal, char[] password, String algorithm)
      使用指定的算法名称从主体密码构造一个KerberosKey。算法名称(不区分大小写)应作为IANAKerberos加密类型编号页面上定义的加密类型字符串提供。生成的密钥的版本号将为0。
      参数:
      principal - 此密码所属的主体
      password - 用于计算密钥的密码
      algorithm - 此密钥将用于的算法名称
      抛出:
      IllegalArgumentException - 如果传递的算法名称不受支持
  • Method Details

    • getPrincipal

      public final KerberosPrincipal getPrincipal()
      返回此密钥所属的主体。
      返回:
      此密钥所属的主体。
      抛出:
      IllegalStateException - 如果密钥已被销毁
    • getVersionNumber

      public final int getVersionNumber()
      返回密钥版本号。
      返回:
      密钥版本号。
      抛出:
      IllegalStateException - 如果密钥已被销毁
    • getKeyType

      public final int getKeyType()
      返回此长期密钥的密钥类型。
      返回:
      密钥类型。
      抛出:
      IllegalStateException - 如果密钥已被销毁
    • getAlgorithm

      public final String getAlgorithm()
      返回此密钥的标准算法名称。算法名称是在IANAKerberos加密类型编号页面上定义的加密类型字符串。

      此方法可能返回以下未在IANA页面上定义的值:

      1. none: 对于etype等于0
      2. unknown: 对于etype大于0但不受实现支持
      3. private: 对于etype小于0
      指定者:
      getAlgorithm 在接口 Key
      返回:
      与此密钥关联的算法名称。
      抛出:
      IllegalStateException - 如果密钥已被销毁
    • getFormat

      public final String getFormat()
      返回此秘密密钥的编码格式名称。
      指定者:
      getFormat 在接口 Key
      返回:
      字符串"RAW"
      抛出:
      IllegalStateException - 如果密钥已被销毁
    • getEncoded

      public final byte[] getEncoded()
      返回此秘密密钥的密钥材料。
      指定者:
      getEncoded 在接口 Key
      返回:
      密钥材料
      抛出:
      IllegalStateException - 如果密钥已被销毁
    • destroy

      public void destroy() throws DestroyFailedException
      通过清除此秘密密钥的密钥材料来销毁此密钥。
      指定者:
      destroy 在接口 Destroyable
      抛出:
      DestroyFailedException - 如果销毁此密钥时发生错误
    • isDestroyed

      public boolean isDestroyed()
      确定此密钥是否已被销毁。
      指定者:
      isDestroyed 在接口 Destroyable
      返回:
      如果此Object已被销毁,则为true;否则为false。
    • toString

      public String toString()
      返回此KerberosKey的信息性文本表示。
      覆盖:
      toString 在类 Object
      返回:
      一个关于这个KerberosKey的信息性文本表示。
    • hashCode

      public int hashCode()
      返回此KerberosKey的哈希码。
      覆盖:
      hashCode 在类 Object
      返回:
      这个KerberosKey的哈希码。
      自从:
      1.6
      另请参阅:
    • equals

      public boolean equals(Object other)
      将指定的对象与此KerberosKey进行比较以检查是否相等。 如果给定对象也是一个KerberosKey并且两个KerberosKey实例是等价的,则返回true。 一个已销毁的KerberosKey对象只等于它自己。
      覆盖:
      equals 在类 Object
      参数:
      other - 要比较的对象
      返回:
      如果指定的对象等于此KerberosKey,则返回true;否则返回false。
      自从:
      1.6
      另请参阅: