Class KerberosKey

  • 实现的所有接口
    SerializableKeySecretKeyDestroyable

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

    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的私有凭据集中。

    使用密钥表读取密钥的Kerberos服务应使用KeyTab类,其中可在需要时读取最新密钥。

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

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

    Implementation Note:
    出于兼容性原因,在此实现中的 KerberosKey(KerberosPrincipal, char[], String)构造函数中支持在JDK 9之前使用的旧算法名称,对于“des-cbc-md5”为“DES”(和null),对于“des3-cbc-sha1-kd”为“DESede” “,”ArcFourHmac“表示”rc4-hmac“,”AES128“表示”aes128-cts-hmac-sha1-96“,”AES256“表示”aes256-cts-hmac-sha1-96“。
    从以下版本开始:
    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 - 如果传递的算法名称不受支持。
    • 方法详细信息

      • getVersionNumber

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

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

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

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

        1. none:对于etype等于0
        2. unknown:对于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 in interface Destroyable
        结果
        如果此 Object已被销毁, Object true,否则为false。
      • toString

        public String toString()
        返回此 KerberosKey的信息性文本表示。
        重写:
        toStringObject
        结果
        KerberosKey的信息性文本表现 KerberosKey
      • equals

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