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.