public final class X500Principal extends Object implements Principal, Serializable
这个类代表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的字符串格式,并且还可以识别其OID(对象标识符)在RFC 3280: Internet X.509 Public Key Infrastructure Certificate and CRL Profile中定义的属性类型关键字。
此字符串表示X500Principal可以通过调用获得getName方法。
请注意getSubjectX500Principal和getIssuerX500Principal方法X509Certificate返回代表证券的发行人和主体字段的X500Principals。
X509Certificate , Serialized Form
| Modifier and Type | Field and Description |
|---|---|
static String |
CANONICAL
可分辨名称的规范字符串格式。
|
static String |
RFC1779
RFC 1779可分辨名称的字符串格式。
|
static String |
RFC2253
RFC 2253可分辨名称的字符串格式。
|
| Constructor and Description |
|---|
X500Principal(byte[] name)
从ASN.1 DER编码表单中的专有名称创建
X500Principal 。
|
X500Principal(InputStream is)
从包含ASN.1 DER编码格式的可分辨名称的
InputStream创建
X500Principal 。
|
X500Principal(String name)
创建一个
X500Principal从X.500标识名的字符串表示(比如: “CN =公爵,OU = JavaSoft的,O = Sun微系统,C = US”)。
|
X500Principal(String name, Map<String,String> keywordMap)
创建一个
X500Principal从X.500标识名的字符串表示(比如: “CN =公爵,OU = JavaSoft的,O = Sun微系统,C = US”)。
|
| Modifier and Type | Method and Description |
|---|---|
boolean |
equals(Object o)
将
Object与此
X500Principal进行比较以获得相等性。
|
byte[] |
getEncoded()
以ASN.1 DER编码形式返回可分辨名称。
|
String |
getName()
使用RFC 2253中定义的格式返回X.500可分辨名称的字符串表示形式。
|
String |
getName(String format)
使用指定的格式返回X.500可分辨名称的字符串表示形式。
|
String |
getName(String format, Map<String,String> oidMap)
使用指定的格式返回X.500可分辨名称的字符串表示形式。
|
int |
hashCode()
返回这个
X500Principal的哈希码。
|
String |
toString()
返回这个
X500Principal的用户友好的字符串
X500Principal 。
|
public static final String RFC1779
public static final String RFC2253
public static final String CANONICAL
public X500Principal(String name)
X500Principal从X.500标识名的字符串表示(比如: “CN =公爵,OU = JavaSoft的,O = Sun微系统,C = US”)。
必须使用RFC 1779或RFC 2253中定义的语法(可接受的格式)来指定专有名称。
该构造函数识别RFC 1779和RFC 2253(并列在getName(String format) )中定义的属性类型关键字,以及T,DNQ或DNQUALIFIER,SURNAME,GIVENNAME,INITIALS,GENERATION,EMAILADDRESS和SERIALNUMBER关键字,其对象标识符(OID)在RFC 3280及其后继中定义。 任何其他属性类型都必须指定为OID。
该实现强制执行比RFC 1779和2253中定义的更为严格的OID语法。它使用RFC 4512中定义的更正确的语法,该语法规定OID至少包含两位数:
numericoid = number 1*( DOT number )
name - RFC 1779或RFC 2253格式的X.500专有名称
NullPointerException -如果
name是
null
IllegalArgumentException - 如果
name未正确指定
public X500Principal(String name, Map<String,String> keywordMap)
X500Principal从X.500标识名的字符串表示(比如: “CN =公爵,OU = JavaSoft的,O = Sun微系统,C = US”)。
必须使用RFC 1779或RFC 2253中定义的语法(可接受的格式)来指定专有名称。
此构造方法识别在指定的属性类型关键字X500Principal(String) ,也认识到必须在项目额外的关键字keywordMap参数。 在关键词的条目keywordMap优先于识别的默认关键字X500Principal(String) 。 关键字必须以大写形式指定,否则将被忽略。 不当指定的关键字将被忽略; 但是,如果名称中的关键字映射到不正确指定的对象标识符(OID),则抛出IllegalArgumentException 。 允许有两个不同的关键字映射到同一个OID。
该实现强制执行比RFC 1779和2253中定义的更为严格的OID语法。它使用RFC 4512中定义的更正确的语法,它指定OID至少包含两位数:
numericoid = number 1*( DOT number )
name - RFC 1779或RFC 2253格式的X.500专有名称
keywordMap - 属性类型关键字映射,其中每个关键字是一个关键字String,它以String形式映射到对应的对象标识符(按照句点分隔的非负整数序列)。
地图可能是空的,但从来没有null 。
NullPointerException - 如果
name或
keywordMap是
null
IllegalArgumentException -如果
name被错误地指定或在关键字
name映射到OID不在正确的形式
public X500Principal(byte[] name)
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格式不正确)
public X500Principal(InputStream is)
InputStream创建X500Principal 。
此结构的ASN.1表示的文档中被提供为X500Principal(byte[] name) 。
输入流的读取位置位于编码的可分辨名称之后的下一个可用字节。
is - 一个
InputStream其中包含ASN.1中的可分辨名称DER编码形式
NullPointerException - 如果
InputStream是
null
IllegalArgumentException - 如果出现编码错误(DN格式不正确)
public String getName()
此方法相当于调用getName(X500Principal.RFC2253) 。
public String getName(String format)
如果“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一致性字符串表示,并附带以下附加规范:
String.toUpperCase(Locale.US)转换为大写String.toUpperCase(Locale.US) String.toLowerCase(Locale.US)转换为小写 未来可能会引入其他标准格式。
format - 要使用的格式
X500Principal的字符串表示使用指定的格式
IllegalArgumentException - 如果指定的格式无效或为空
public String getName(String format, Map<String,String> oidMap)
IllegalArgumentException将被抛出。
这种方法在如在所指定的格式返回字符串getName(String)和还发出附加属性类型关键字用于具有中的条目的OID oidMap参数。 在OID条目oidMap优先认可默认的OID getName(String) 。 不当指定的OID被忽略; 但是,如果名称中的OID映射到不正确指定的关键字,则抛出IllegalArgumentException 。
未来可能会引入其他标准格式。
警告:附加属性类型关键字可能不被其他实现识别; 因此,如果您不确定这些关键字是否将被其他实现识别,那么不要使用此方法。
format - 要使用的格式
oidMap - 一个OID映射,其中每个键是以String形式(由句点分隔的非负整数序列)的对象标识符,映射到相应的属性类型keyword String。
地图可能是空的,但从来没有null 。
X500Principal使用指定的格式
IllegalArgumentException - 如果指定的格式无效,则该名称中的OID或OID映射到不正确的关键字
NullPointerException - 如果
oidMap是
null
public byte[] getEncoded()
public String toString()
X500Principal的用户友好的字符串
X500Principal 。
public boolean equals(Object o)
Object与此X500Principal进行比较以获得相等性。
具体来说,如果Object o是X500Principal ,并且如果该对象和o的相应的规范字符串表示(通过getName(X500Principal.CANONICAL)方法获得)相等,则该方法返回true 。
此实现符合RFC 3280的要求。
public int hashCode()
X500Principal的哈希码。
哈希码通过以下getName(X500Principal.CANONICAL).hashCode() : getName(X500Principal.CANONICAL).hashCode()
hashCode在界面
Principal
hashCode在类别
Object
X500Principal的哈希码
Object.equals(java.lang.Object) ,
System.identityHashCode(java.lang.Object)
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.