Module  java.base

Class X500Principal

    • Field Summary

      Fields  
      Modifier and Type Field 描述
      static String CANONICAL
      可分辨名称的规范字符串格式。
      static String RFC1779
      RFC 1779可分辨名称的字符串格式。
      static String RFC2253
      RFC 2253可分辨名称的字符串格式。
    • 构造方法摘要

      构造方法  
      Constructor 描述
      X500Principal​(byte[] name)
      从ASN.1 DER编码形式的专有名称创建一个 X500Principal
      X500Principal​(InputStream is)
      从包含ASN.1 DER编码表单中的可分辨名称的 InputStream创建一个 X500Principal
      X500Principal​(String name)
      从X.500专有名称的字符串表示形式(例如:“CN = Duke,OU = JavaSoft,O = Sun Microsystems,C = US”)创建 X500Principal
      X500Principal​(String name, Map<String,String> keywordMap)
      从X.500专有名称的字符串表示形式(例如:“CN = Duke,OU = JavaSoft,O = Sun Microsystems,C = US”)创建一个 X500Principal
    • 构造方法详细信息

      • X500Principal

        public X500Principal​(String name)
        从X.500专有名称的字符串表示形式(例如:“CN = Duke,OU = JavaSoft,O = Sun Microsystems,C = US”)创建一个X500Principal 必须使用RFC 1779或RFC 2253中定义的语法(可接受的格式)来指定专有名称。

        该构造函数识别RFC 1779和RFC 2253(和getName(String format) )中定义的属性类型关键字,以及T,DNQ或DNQUALIFIER,SURNAME,GIVENNAME,INITIALS,GENERATION,EMAILADDRESS和SERIALNUMBER关键字,其对象标识符(OID)在RFC 5280中定义。任何其他属性类型都必须指定为OID。

        该实现实现了比RFC 1779和2253中定义的更严格的OID语法。它使用RFC 4512中定义的更正确的语法,其指定OID至少包含2位数:

        numericoid = number 1*( DOT number )

        参数
        name - RFC 1779或RFC 2253格式的X.500专有名称
        异常
        NullPointerException - 如果 namenull
        IllegalArgumentException - 如果 name未正确指定
      • X500Principal

        public X500Principal​(String name,
                             Map<String,String> keywordMap)
        从X.500专有名称的字符串表示形式(例如:“CN = Duke,OU = JavaSoft,O = Sun Microsystems,C = US”)创建一个X500Principal 必须使用RFC 1779或RFC 2253中定义的语法(可接受的格式)来指定专有名称。

        此构造函数识别X500Principal(String)指定的属性类型关键字,并且还可以识别在keywordMap参数中具有条目的其他关键字。 keywordMap中的关键字条目优先于由X500Principal(String)识别的默认关键字。 关键字必须以大写形式指定,否则将被忽略。 不当指定的关键字将被忽略; 但是,如果名称中的关键字映射到不正确指定的对象标识符(OID),则抛出IllegalArgumentException 允许有两个不同的关键字映射到同一个OID。

        该实现强制执行比RFC 1779和2253中定义的更为严格的OID语法。它使用RFC 4512中定义的更为正确的语法,该语法规定OID至少包含2位数:

        numericoid = number 1*( DOT number )

        参数
        name - RFC 1779或RFC 2253格式的X.500专有名称
        keywordMap - 属性类型关键字映射,其中每个关键字是一个关键字字符串,它以String形式映射到对应的对象标识符(由句点分隔的非负整数序列)。 地图可能是空的,但从来不是null
        异常
        NullPointerException - 如果 namekeywordMapnull
        IllegalArgumentException -如果 name在错误地指定或关键字 name映射到OID不在正确的形式
        从以下版本开始:
        1.6
      • X500Principal

        public X500Principal​(byte[] name)
        从ASN.1 DER编码表单中的专有名称创建一个X500Principal 该结构的ASN.1符号如下。
           Name ::= CHOICE { RDNSequence } RDNSequence ::= SEQUENCE OF RelativeDistinguishedName RelativeDistinguishedName ::= SET SIZE (1 .. MAX) OF AttributeTypeAndValue AttributeTypeAndValue ::= SEQUENCE { type AttributeType, value AttributeValue } AttributeType ::= OBJECT IDENTIFIER AttributeValue ::= ANY DEFINED BY AttributeType .... DirectoryString ::= CHOICE { teletexString TeletexString (SIZE (1..MAX)), printableString PrintableString (SIZE (1..MAX)), universalString UniversalString (SIZE (1..MAX)), utf8String UTF8String (SIZE (1.. MAX)), bmpString BMPString (SIZE (1..MAX)) }  
        参数
        name - 以ASN.1 DER编码形式包含可分辨名称的字节数组
        异常
        IllegalArgumentException - 如果出现编码错误(DN格式不正确)
      • X500Principal

        public X500Principal​(InputStream is)
        从包含ASN.1 DER编码表单中的可分辨名称的InputStream创建一个X500Principal 此结构的ASN.1符号在X500Principal(byte[] name)的文档中提供。

        输入流的读取位置位于编码的可分辨名称之后的下一个可用字节。

        参数
        is - 一个包含ASN.1 DER编码格式的可分辨名称的 InputStream
        异常
        NullPointerException - 如果 InputStreamnull
        IllegalArgumentException - 如果出现编码错误(DN格式不正确)
    • 方法详细信息

      • getName

        public String getName​()
        使用RFC 2253中定义的格式返回X.500可分辨名称的字符串表示形式。

        此方法相当于调用getName(X500Principal.RFC2253)

        Specified by:
        getName在接口 Principal
        结果
        该名称为 X500Principal
      • getName

        public String getName​(String format)
        使用指定的格式返回X.500可分辨名称的字符串表示形式。 格式的有效值为“RFC1779”,“RFC2253”和“CANONICAL”(不区分大小写)。

        如果“RFC1779”被指定为格式,则此方法将发出RFC 1779(CN,L,ST,O,OU,C,STREET)中定义的属性类型关键字。 任何其他属性类型都作为OID发出。

        如果“RFC2253”被指定为格式,则该方法发出RFC 2253(CN,L,ST,O,OU,C,STREET,DC,UID)中定义的属性类型关键字。 任何其他属性类型都作为OID发出。 在严格的阅读下,RFC 2253只指定一个UTF-8字符串表示形式。 该方法返回的String是通过解码此UTF-8表示形式而获得的Unicode字符串。

        如果将“CANONICAL”指定为格式,则此方法返回RFC 2253一致性字符串表示,并附带以下附加规范:

        1. 从以点分十进制OID编码的属性类型中删除前导零
        2. 类型为PrintableString和UTF8String的DirectoryString属性值不以十六进制格式输出
        3. 除PrintableString和UTF8String之外的类型的DirectoryString属性值以十六进制格式输出
        4. 前导和尾随的空白字符从非十六进制属性值中删除(除非该值完全由空格字符组成)
        5. 一个或多个空白字符的内部子字符串将转换为非十六进制属性值中的单个空格
        6. 包含多个属性值断言(AVA)的相对可分辨名称按以下顺序输出:包含标准关键字的AVAs的字母排序,后跟包含OID关键字的AVAs的数字排序。
        7. 转义属性值中唯一的字符是RFC 2253状态的第2.4节必须被转义(它们使用前面的反斜杠字符进行转义)
        8. 整个名称使用String.toUpperCase(Locale.US)转换为大写String.toUpperCase(Locale.US)
        9. 整个名称使用String.toLowerCase(Locale.US)转换为小写
        10. 使用Unicode标准和UAX#15中描述的标准化形式KD终止该名称

        未来可能会引入其他标准格式。

        参数
        format - 要使用的格式
        结果
        这个 X500Principal的字符串表示使用指定的格式
        异常
        IllegalArgumentException - 如果指定的格式无效或为空
      • getName

        public String getName​(String format,
                              Map<String,String> oidMap)
        使用指定的格式返回X.500可分辨名称的字符串表示形式。 该格式的有效值为“RFC1779”和“RFC2253”(不区分大小写)。 “CANONICAL”是不允许的,一个IllegalArgumentException将被抛出。

        此方法以getName(String)指定的格式返回字符串,并为具有oidMap参数中的条目的OID发出附加属性类型关键字。 在OID条目oidMap优先认可默认的OID getName(String) 不当指定的OID被忽略; 但是,如果名称中的OID映射到不正确指定的关键字,则抛出IllegalArgumentException

        未来可能会引入其他标准格式。

        警告:附加属性类型关键字可能不被其他实现识别; 因此,如果您不确定这些关键字是否将被其他实现识别,那么不要使用此方法。

        参数
        format - 要使用的格式
        oidMap - 一个OID映射,其中每个键是以String形式(由句点分隔的非负整数序列)的对象标识符,映射到相应的属性类型keyword String。 地图可能是空的,但从来不是null
        结果
        这个 X500Principal的字符串表示 X500Principal使用指定的格式
        异常
        IllegalArgumentException - 如果指定的格式无效,则该名称中的OID或OID映射到不正确的关键字
        NullPointerException - 如果 oidMapnull
        从以下版本开始:
        1.6
      • getEncoded

        public byte[] getEncoded​()
        以ASN.1 DER编码形式返回可分辨名称。 该结构的ASN.1符号在X500Principal(byte[] name)的文档中提供。

        请注意,返回的字节数组被克隆以防止后续修改。

        结果
        一个包含ASN.1 DER编码形式的可分辨名称的字节数组
      • toString

        public String toString​()
        返回这个 X500Principal的用户友好的字符串表示。
        Specified by:
        toString在接口 Principal
        重写:
        toStringObject
        结果
        这个 X500Principal的字符串表示 X500Principal
      • equals

        public boolean equals​(Object o)
        ObjectX500Principal进行比较,以获得相等性。

        具体来说,如果Object oX500Principal并且该对象和o的相应的规范字符串表示(通过getName(X500Principal.CANONICAL)方法获得)是相等的,则该方法返回true

        此实现符合RFC 5280的要求。

        Specified by:
        equals在接口 Principal
        重写:
        equalsObject
        参数
        o - 要与 X500Principal相等的对象
        结果
        true如果指定 Object等于这个 X500Principalfalse否则
        另请参见:
        Object.hashCode()HashMap