- 所有已实现的接口:
-
Serializable
,Principal
此类表示X.500 Principal
。 X500Principal
由如"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
的字符串表示形式。
请注意,X509Certificate
的getSubjectX500Principal
和getIssuerX500Principal
方法返回代表证书的颁发者和主题字段的X500Principals。
- 自从:
- 1.4
- 参见:
-
Field Summary
-
Constructor Summary
ConstructorDescriptionX500Principal
(byte[] name) 从ASN.1 DER编码形式的显式名称创建X500Principal
。从包含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
。 -
Method Summary
-
Field Details
-
RFC1779
显式名称的RFC 1779字符串格式。- 参见:
-
RFC2253
显式名称的RFC 2253字符串格式。- 参见:
-
CANONICAL
显式名称的规范字符串格式。- 参见:
-
-
Constructor Details
-
X500Principal
从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
- 如果name
为null
-
IllegalArgumentException
- 如果name
未正确指定
-
X500Principal
从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
- 如果name
或keywordMap
为null
-
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
从包含ASN.1 DER编码形式的显式名称的InputStream
创建X500Principal
。此结构的ASN.1表示在X500Principal(byte[] name)
的文档中提供。输入流的读取位置定位到编码的显式名称之后的下一个可用字节。
- 参数:
-
is
- 包含ASN.1 DER编码形式的显式名称的InputStream
- 抛出:
-
NullPointerException
- 如果InputStream
为null
-
IllegalArgumentException
- 如果发生编码错误(DN格式不正确)
-
-
Method Details
-
getName
使用RFC 2253中定义的格式返回X.500显式名称的字符串表示形式。此方法等效于调用
getName(X500Principal.RFC2253)
。 -
getName
返回使用指定格式的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的字符串表示形式,并具有以下额外的规范化:
- 从以点分十进制OID编码的属性类型中删除前导零
- PrintableString和UTF8String类型的DirectoryString属性值不以十六进制格式输出
- 除PrintableString和UTF8String之外的其他类型的DirectoryString属性值以十六进制格式输出
- 从非十六进制属性值中删除前导和尾随空格字符(除非该值完全由空格字符组成)
- 在非十六进制属性值中,一个或多个空格字符的内部子字符串转换为单个空格
- 包含多个属性值断言(AVA)的相对专有名称按以下顺序输出:包含标准关键字的AVA按字母顺序排列,然后按OID关键字的AVA按数字顺序排列。
- 属性值中仅转义的字符是RFC 2253第2.4节规定必须转义的字符(它们使用前导反斜杠字符进行转义)
- 整个名称使用
String.toUpperCase(Locale.US)
转换为大写 - 整个名称使用
String.toLowerCase(Locale.US)
转换为小写 - 最终使用规范化形式KD进行规范化,如Unicode标准和UAX#15中所述
将来可能会引入其他标准格式。
- 参数:
-
format
- 要使用的格式 - 返回:
-
使用指定格式的此
X500Principal
的字符串表示形式 - 抛出:
-
IllegalArgumentException
- 如果指定的格式无效或为null
-
getName
返回使用指定格式的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
- 如果oidMap
为null
- 自:
- 1.6
-
getEncoded
public byte[] getEncoded()返回ASN.1 DER编码形式的专有名称。此结构的ASN.1表示法在X500Principal(byte[] name)
的文档中提供。请注意,返回的字节数组已克隆,以防止后续修改。
- 返回:
- 包含ASN.1 DER编码形式的专有名称的字节数组
-
toString
返回此X500Principal
的用户友好字符串表示形式。 -
equals
将指定的Object
与此X500Principal
进行比较。具体地,如果
Object
o是一个X500Principal
,并且通过getName(X500Principal.CANONICAL)
方法获得的此对象和o的规范字符串表示形式相等,则此方法返回true
。此实现符合RFC 5280的要求。
-
hashCode
public int hashCode()返回此X500Principal
的哈希码。哈希码通过以下方式计算:
getName(X500Principal.CANONICAL).hashCode()
-