Class KerberosKey

  • All Implemented Interfaces:
    SerializableKeySecretKeyDestroyable


    public class KerberosKey
    extends Object
    implements SecretKey
    该类封装了Kerberos主体的长期密钥。

    A KerberosKey对象包括EncryptionKey,作为其所有者的KerberosPrincipal和密钥的版本号。

    EncryptionKey在Kerberos协议规范( RFC 4120 )的第4.2.9节中定义为:

      EncryptionKey   ::= SEQUENCE {
                 keytype         [0] Int32 -- actually encryption type --,
                 keyvalue        [1] OCTET STRING
         } 
    KerberosKey的关键材料定义为上述keyValue的值。

    获取主体密码并从中生成密钥的所有Kerberos JAAS登录模块都应该使用此类。 有时,例如在没有用户到用户身份验证的情况下验证服务器时,登录模块将在认证过程的提交阶段将该类的实例存储在Subject的私有凭证集中。

    使用keytab读取密钥的Kerberos服务应使用KeyTab类,当需要时可以读取最新的密钥。

    为应用程序被授予可能需要PrivateCredentialPermission是否需要访问KerberosKey从Subject实例。 当应用程序依赖于默认的JGSS Kerberos机制来访问KerberosKey时,不需要此权限。 但是在这种情况下,应用程序将需要适当的ServicePermission

    当使用KerberosKey(KerberosPrincipal, char[], String)构造函数创建KerberosKey ,实现可能会接受非IANA算法名称(例如,“rc4-hmac”的“ArcFourMac”),但是getAlgorithm()方法必须始终返回IANA算法名称。

    Implementation Note:
    由于兼容性原因,在此实现中的 2707774665707构造函数中支持JDK 9之前使用的旧算法名称,“des-cbc-md5”,“des3-cbc-sha1-kd的”DESede“为”DES“(和null) “,”ac12-cts-hmac-sha1-96“的”AES128“,”aes256-cts-hmac-sha1-96“的AES256”,“rc4-hmac”的“ArcFourHmac”
    从以下版本开始:
    1.4
    另请参见:
    Serialized Form
    • 构造方法详细信息

      • 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 算法名称(不区分大小写)应作为IANA Kerberos Encryption Type Numbers页面上定义的加密类型字符串提供。 生成的密钥的版本号将为0。
        参数
        principal - 此密码所属的主体
        password - 应用于计算密钥的密码
        algorithm - 此密钥将被用于的算法的名称
        异常
        IllegalArgumentException - 如果传递的算法的名称不受支持。
    • 方法详细信息

      • getPrincipal

        public final KerberosPrincipal getPrincipal​()
        返回此密钥所属的主体。
        结果
        这个钥匙所属的校长。
        异常
        IllegalStateException - 如果密钥被销毁
      • getVersionNumber

        public final int getVersionNumber​()
        返回密钥版本号。
        结果
        关键版本号。
        异常
        IllegalStateException - 如果密钥被销毁
      • getKeyType

        public final int getKeyType​()
        返回此长期密钥的密钥类型。
        结果
        关键类型。
        异常
        IllegalStateException - 如果密钥被销毁
      • getAlgorithm

        public final String getAlgorithm​()
        返回此键的标准算法名称。 算法名称是IANA Kerberos Encryption Type Numbers页面上定义的加密类型字符串。

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

        1. 无:对于etype等于0
        2. 未知:对于etype大于0但不支持实现
        3. private:对于小于0的etype
        Specified by:
        getAlgorithm在接口 Key
        结果
        与该密钥相关联的算法的名称。
        异常
        IllegalStateException - 如果密钥被销毁
      • getFormat

        public final String getFormat​()
        返回此密钥的编码格式的名称。
        Specified by:
        getFormat接口 Key
        结果
        字符串“RAW”
        异常
        IllegalStateException - 如果密钥被销毁
      • getEncoded

        public final byte[] getEncoded​()
        返回此密钥的密钥材料。
        Specified by:
        getEncoded在接口 Key
        结果
        关键材料
        异常
        IllegalStateException - 如果密钥被销毁
      • isDestroyed

        public boolean isDestroyed​()
        确定此密钥是否已被销毁。
        Specified by:
        isDestroyed在接口 Destroyable
        结果
        如果这个 Object已被销毁, Object true,否则为false。
      • toString

        public String toString​()
        返回此 KerberosKey的内容丰富的文字表示。
        重写:
        toStringObject
        结果
        这个 KerberosKey的内容丰富的文字表示。
      • equals

        public boolean equals​(Object other)
        将指定的对象与此KerberosKey进行比较以获得相等性。 如果给定对象也是KerberosKey ,并且两个KerberosKey实例是等价的,则返回true。 一个销毁的KerberosKey对象只等于自己。
        重写:
        equals中的 Object
        参数
        other - 要比较的对象
        结果
        如果指定的对象等于这个 KerberosKeyKerberosKey true,否则为false。
        从以下版本开始:
        1.6
        另请参见:
        Object.hashCode()HashMap