- java.lang.Object
-
- javax.security.auth.x500.X500Principal
-
- All Implemented Interfaces:
-
Serializable
,Principal
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 5280: Internet X.509 Public Key Infrastructure Certificate and CRL Profile中定义的属性类型关键字。
该
X500Principal
的字符串表示可以通过调用getName
方法获得。请注意,
getSubjectX500Principal
和getIssuerX500Principal
方法返回表示证书的颁发者和主体字段的X509Certificate
。- 从以下版本开始:
- 1.4
- 另请参见:
-
X509Certificate
, Serialized Form
-
-
构造方法摘要
构造方法 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
。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 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
的用户友好的字符串表示。
-
-
-
字段详细信息
-
RFC1779
public static final String RFC1779
RFC 1779可分辨名称的字符串格式。- 另请参见:
- Constant Field Values
-
RFC2253
public static final String RFC2253
RFC 2253可分辨名称的字符串格式。- 另请参见:
- Constant Field Values
-
CANONICAL
public static final String CANONICAL
可分辨名称的规范字符串格式。- 另请参见:
- Constant Field Values
-
-
构造方法详细信息
-
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
- 如果name
是null
-
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
- 如果name
或keywordMap
是null
-
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
- 如果InputStream
是null
-
IllegalArgumentException
- 如果出现编码错误(DN格式不正确)
-
-
方法详细信息
-
getName
public String getName()
使用RFC 2253中定义的格式返回X.500可分辨名称的字符串表示形式。此方法相当于调用
getName(X500Principal.RFC2253)
。
-
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一致性字符串表示,并附带以下附加规范:
- 从以点分十进制OID编码的属性类型中删除前导零
- 类型为PrintableString和UTF8String的DirectoryString属性值不以十六进制格式输出
- 除PrintableString和UTF8String之外的类型的DirectoryString属性值以十六进制格式输出
- 前导和尾随的空白字符从非十六进制属性值中删除(除非该值完全由空格字符组成)
- 一个或多个空白字符的内部子字符串将转换为非十六进制属性值中的单个空格
- 包含多个属性值断言(AVA)的相对可分辨名称按以下顺序输出:包含标准关键字的AVAs的字母排序,后跟包含OID关键字的AVAs的数字排序。
- 转义属性值中唯一的字符是RFC 2253状态的第2.4节必须被转义(它们使用前面的反斜杠字符进行转义)
- 整个名称使用
String.toUpperCase(Locale.US)
转换为大写String.toUpperCase(Locale.US)
- 整个名称使用
String.toLowerCase(Locale.US)
转换为小写 - 使用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优先认可默认的OIDgetName(String)
。 不当指定的OID被忽略; 但是,如果名称中的OID映射到不正确指定的关键字,则抛出IllegalArgumentException
。未来可能会引入其他标准格式。
警告:附加属性类型关键字可能不被其他实现识别; 因此,如果您不确定这些关键字是否将被其他实现识别,那么不要使用此方法。
- 参数
-
format
- 要使用的格式 -
oidMap
- 一个OID映射,其中每个键是以String形式(由句点分隔的非负整数序列)的对象标识符,映射到相应的属性类型keyword String。 地图可能是空的,但从来不是null
。 - 结果
-
这个
X500Principal
的字符串表示X500Principal
使用指定的格式 - 异常
-
IllegalArgumentException
- 如果指定的格式无效,则该名称中的OID或OID映射到不正确的关键字 -
NullPointerException
- 如果oidMap
是null
- 从以下版本开始:
- 1.6
-
getEncoded
public byte[] getEncoded()
- 结果
- 一个包含ASN.1 DER编码形式的可分辨名称的字节数组
-
toString
public String toString()
返回这个X500Principal
的用户友好的字符串表示。
-
equals
public boolean equals(Object o)
将Object
与X500Principal
进行比较,以获得相等性。具体来说,如果
Object
o是X500Principal
并且该对象和o的相应的规范字符串表示(通过getName(X500Principal.CANONICAL)
方法获得)是相等的,则该方法返回true
。此实现符合RFC 5280的要求。
-
hashCode
public int hashCode()
返回这个X500Principal
的哈希码。哈希码通过以下计算:
getName(X500Principal.CANONICAL).hashCode()
- Specified by:
-
hashCode
在接口Principal
- 重写:
-
hashCode
在Object
- 结果
-
这个
X500Principal
的哈希码 - 另请参见:
-
Object.equals(java.lang.Object)
,System.identityHashCode(java.lang.Object)
-
-