Module java.base

Class X500Principal

java.lang.Object
javax.security.auth.x500.X500Principal
所有已实现的接口:
Serializable, Principal

public final class X500Principal extends Object implements Principal, Serializable

此类表示X.500 PrincipalX500Principal由如"CN=Duke, OU=JavaSoft, O=Sun Microsystems, C=US"等显式名称表示。

可以通过使用显式名称的字符串表示形式或使用显式名称的ASN.1 DER编码字节表示形式来实例化此类。当前对显式名称的字符串表示形式的规范在RFC 2253: Lightweight Directory Access Protocol (v3): UTF-8 String Representation of Distinguished Names中定义。但是,此类接受来自RFC 2253和RFC 1779: A String Representation of Distinguished Names的字符串格式,并且还识别在RFC 5280: Internet X.509 Public Key Infrastructure Certificate and CRL Profile中定义的属性类型关键字的OID(对象标识符)。

可以通过调用getName方法获取此X500Principal的字符串表示形式。

请注意,X509CertificategetSubjectX500PrincipalgetIssuerX500Principal方法返回代表证书的颁发者和主题字段的X500Principals。

自从:
1.4
参见:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final String
    显式名称的规范字符串格式。
    static final String
    显式名称的RFC 1779字符串格式。
    static final String
    显式名称的RFC 2253字符串格式。
  • Constructor Summary

    Constructors
    Constructor
    Description
    X500Principal(byte[] name)
    从ASN.1 DER编码形式的显式名称创建X500Principal
    从包含ASN.1 DER编码形式的显式名称的InputStream创建X500Principal
    从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
  • Method Summary

    Modifier and Type
    Method
    Description
    boolean
    将指定的Object与此X500Principal进行比较以检查是否相等。
    byte[]
    返回ASN.1 DER编码形式的显式名称。
    使用RFC 2253中定义的格式返回X.500显式名称的字符串表示形式。
    getName(String format)
    使用指定格式返回X.500显式名称的字符串表示形式。
    getName(String format, Map<String,String> oidMap)
    使用指定格式返回X.500显式名称的字符串表示形式。
    int
    返回此X500Principal的哈希码。
    返回此X500Principal的用户友好字符串表示形式。

    Methods declared in class java.lang.Object

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait

    Methods declared in interface java.security.Principal

    implies
  • Field Details

    • RFC1779

      public static final String RFC1779
      显式名称的RFC 1779字符串格式。
      参见:
    • RFC2253

      public static final String RFC2253
      显式名称的RFC 2253字符串格式。
      参见:
    • CANONICAL

      public static final String CANONICAL
      显式名称的规范字符串格式。
      参见:
  • Constructor Details

    • 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)中列出),以及在RFC 5280中定义的OID中定义的T、DNQ或DNQUALIFIER、SURNAME、GIVENNAME、INITIALS、GENERATION、EMAILADDRESS和SERIALNUMBER关键字。

      此实现比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参数中具有条目的其他关键字。关键字映射中的关键字条目优先于X500Principal(String)默认识别的关键字。关键字必须全部大写,否则将被忽略。不正确指定的关键字将被忽略;但是,如果名称中的关键字映射到未正确指定的对象标识符(OID),则会抛出IllegalArgumentException。允许有映射到相同OID的2个不同关键字。

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

      numericoid = number 1*( DOT number )

      参数:
      name - RFC 1779或RFC 2253格式中的X.500显式名称
      keywordMap - 属性类型关键字映射,其中每个键是关键字字符串,映射到相应的对象标识符的字符串形式(由一系列用句点分隔的非负整数组成)。映射可能为空,但绝不为null
      抛出:
      NullPointerException - 如果namekeywordMapnull
      IllegalArgumentException - 如果未正确指定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格式不正确)
  • Method Details

    • getName

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

      此方法等效于调用getName(X500Principal.RFC2253)

      指定者:
      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字符串表示形式。此方法返回的字符串是通过解码此UTF-8表示形式而获得的Unicode字符串。

      如果指定格式为"CANONICAL",则此方法返回一个符合RFC 2253的字符串表示形式,并具有以下额外的规范化:

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

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

      参数:
      format - 要使用的格式
      返回:
      使用指定格式的此X500Principal的字符串表示形式
      抛出:
      IllegalArgumentException - 如果指定的格式无效或为null
    • getName

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

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

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

      警告:其他实现可能无法识别附加的属性类型关键字;因此,如果不确定其他实现是否能够识别这些关键字,请勿使用此方法。

      参数:
      format - 要使用的格式
      oidMap - OID映射,其中每个键是以字符串形式表示的对象标识符(由点分隔的非负整数序列),映射到相应的属性类型关键字字符串。映射可能为空,但绝不为null
      返回:
      使用指定格式的此X500Principal的字符串表示形式
      抛出:
      IllegalArgumentException - 如果指定的格式无效、为null或名称中的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的用户友好字符串表示形式。
      指定者:
      toString 在接口 Principal
      覆盖:
      toString 在类 Object
      返回:
      X500Principal的字符串表示形式
    • equals

      public boolean equals(Object o)
      将指定的Object与此X500Principal进行比较。

      具体地,如果Object o是一个X500Principal,并且通过getName(X500Principal.CANONICAL)方法获得的此对象和o的规范字符串表示形式相等,则此方法返回true

      此实现符合RFC 5280的要求。

      指定者:
      equals 在接口 Principal
      覆盖:
      equals 在类 Object
      参数:
      o - 要与此X500Principal进行比较的对象
      返回:
      如果指定的Object等于此X500Principal,则返回true;否则返回false
      参见:
    • hashCode

      public int hashCode()
      返回此X500Principal的哈希码。

      哈希码通过以下方式计算:getName(X500Principal.CANONICAL).hashCode()

      指定者:
      hashCode 在接口 Principal
      覆盖:
      hashCode 在类 Object
      返回:
      X500Principal的哈希码
      参见: