- java.lang.Object
-
- javax.security.auth.x500.X500Principal
-
- 实现的所有接口
-
Serializable
,Principal
public final class X500Principal extends Object implements Principal, Serializable
此类表示X.500
Principal
。X500Principal
s由专有名称表示,例如“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中定义的属性类型关键字。
可以通过调用
getName
方法获得此X500Principal
的字符串表示形式。请注意,
getSubjectX500Principal
和getIssuerX500Principal
方法X509Certificate
返回代表证书的颁发者和主题字段的X509Certificate
。- 从以下版本开始:
- 1.4
- 另请参见:
-
X509Certificate
, Serialized Form
-
-
构造方法摘要
构造方法 构造器 描述 X500Principal(byte[] name)
从ASN.1 DER编码形式的可分辨名称创建X500Principal
。X500Principal(InputStream is)
从InputStream
创建X500Principal
,InputStream
包含ASN.1 DER编码形式的可分辨名称。X500Principal(String name)
从X.500可分辨名称的字符串表示形式创建X500Principal
(例如:“CN = Duke,OU = JavaSoft,O = Sun Microsystems,C = US”)。X500Principal(String name, Map<String,String> keywordMap)
从X.500可分辨名称的字符串表示形式创建X500Principal
(例如:“CN = Duke,OU = JavaSoft,O = Sun Microsystems,C = US”)。
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 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
。
-
-
-
构造方法详细信息
-
X500Principal
public X500Principal(String name)
从X.500可分辨名称的字符串表示形式创建X500Principal
(例如:“CN = Duke,OU = JavaSoft,O = Sun Microsystems,C = US”)。 必须使用RFC 1779或RFC 2253中定义的语法指定专有名称(格式是可接受的)。此构造函数识别RFC 1779和RFC 2253(并在
getName(String format)
中列出)中定义的属性类型关键字,以及其对象标识符(OID)的T,DNQ或DNQUALIFIER,SURNAME,GIVENNAME,INITIALS,GENERATION,EMAILADDRESS和SERIALNUMBER关键字在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
正确指定name
-
X500Principal
public X500Principal(String name, Map<String,String> keywordMap)
从X.500可分辨名称的字符串表示形式创建X500Principal
(例如:“CN = Duke,OU = JavaSoft,O = Sun Microsystems,C = US”)。 必须使用RFC 1779或RFC 2253中定义的语法指定专有名称(格式是可接受的)。此构造函数识别
X500Principal(String)
中指定的属性类型关键字,并且还识别在keywordMap
参数中具有条目的其他关键字。 在关键词的条目keywordMap优先于识别的默认关键字X500Principal(String)
。 关键字必须以所有大写形式指定,否则将被忽略。 忽略不正确指定的关键字; 但是,如果名称中的关键字映射到未正确指定的对象标识符(OID),则抛出IllegalArgumentException
。 允许有2个不同的关键字映射到相同的OID。此实现强制执行比RFC 1779和2253中定义的更严格的OID语法。它使用RFC 4512中定义的更正确的语法,该语法指定OID包含至少2个数字:
numericoid = number 1*( DOT number )
- 参数
-
name
- RFC 1779或RFC 2253格式的X.500可分辨名称 -
keywordMap
- 属性类型关键字映射,其中每个键是关键字String,以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)
从InputStream
创建X500Principal
,InputStream
包含ASN.1 DER编码形式的可分辨名称。 此结构的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字符串表示。 此方法返回的字符串是通过解码此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
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形式的对象标识符(由句点分隔的非负整数序列),映射到对应的属性类型关键字String。 地图可能是空的,但从不null
。 - 结果
-
使用指定格式的此
X500Principal
的字符串表示形式 - 异常
-
IllegalArgumentException
- 如果指定的格式无效,null或名称中的OID映射到未正确指定的关键字 -
NullPointerException
- 如果oidMap
是null
- 从以下版本开始:
- 1.6
-
getEncoded
public byte[] getEncoded()
- 结果
- 包含ASN.1 DER编码形式的可分辨名称的字节数组
-
toString
public String toString()
返回此X500Principal
的用户友好字符串表示X500Principal
。
-
equals
public boolean equals(Object o)
比较指定的Object
与此X500Principal
是否相等。具体而言,如果
Object
o是X500Principal
并且此对象的相应规范字符串表示(通过getName(X500Principal.CANONICAL)
方法获得)和o相等,则此方法返回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)
-
-