Класс X500Principal
- Все реализуемые интерфейсы:
Serializable, Principal
public final class X500Principal extends Object implements Principal, Serializable
Этот класс представляет X.500 Principal. X500Principals представлены различающимися именами, например "CN=Duke, OU=JavaSoft, O=Sun Microsystems, C=US".
Экземпляр этого класса можно создать, используя строковое представление различающегося имени или байтовое представление различающегося имени в кодировке ASN.1 DER. Текущая спецификация строкового представления различающегося имени определена в RFC 2253: протокол облегчённого доступа к каталогам (v3): представление различающихся имён в виде строк UTF-8. Однако этот класс принимает строковые форматы как из RFC 2253, так и из RFC 1779: строковое представление различающихся имён, а также распознаёт ключевые слова типов атрибутов, OID (идентификаторы объектов) которых определены в RFC 5280: профиль сертификата и списка отзыва сертификатов (CRL) интернет-инфраструктуры открытых ключей X.509.
Строковое представление этого X500Principal можно получить, вызвав методы getName.
Обратите внимание, что методы getSubjectX500Principal и getIssuerX500Principal класса X509Certificate возвращают X500Principal, представляющие поля издателя и субъекта сертификата.
- Начиная с:
- 1.4
- Внешние спецификации
- См. также:
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static final String |
CANONICAL |
Канонический строковый формат различающихся имён. |
static final String |
RFC1779 |
Строковый формат различающихся имён RFC 1779. |
static final String |
RFC2253 |
Строковый формат различающихся имён RFC 2253. |
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
X500Principal |
Создаёт X500Principal из различающегося имени в кодировке ASN.1 DER. |
X500Principal |
Создаёт X500Principal из InputStream, содержащего различающееся имя в кодировке ASN.1 DER. |
X500Principal |
Создаёт X500Principal из строкового представления различающегося имени X.500 (например: "CN=Duke, OU=JavaSoft, O=Sun Microsystems, C=US"). |
X500Principal |
Создаёт X500Principal из строкового представления различающегося имени X.500 (например: "CN=Duke, OU=JavaSoft, O=Sun Microsystems, C=US"). |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
equals |
Сравнивает указанный Object с этим X500Principal на равенство. |
byte[] |
getEncoded() |
Возвращает различающееся имя в кодировке ASN.1 DER. |
String |
getName() |
Возвращает строковое представление различающегося имени X.500 в формате, определённом RFC 2253. |
String |
getName |
Возвращает строковое представление различающегося имени X.500 в указанном формате. |
String |
getName |
Возвращает строковое представление различающегося имени X.500 в указанном формате. |
int |
hashCode() |
Возвращает хеш-код этого X500Principal. |
String |
toString() |
Возвращает удобное для пользователя строковое представление этого X500Principal. |
Подробное описание полей
RFC1779
public static final String RFC1779
- См. также:
RFC2253
public static final String RFC2253
- См. также:
CANONICAL
public static final String CANONICAL
- См. также:
Подробное описание конструкторов
X500Principal
public X500Principal(String name)
X500Principal из строкового представления различающегося имени X.500 (например: "CN=Duke, OU=JavaSoft, O=Sun Microsystems, C=US"). Различающееся имя должно быть задано с использованием грамматики, определённой в RFC 1779 или RFC 2253 (допускается любой из этих форматов). Этот конструктор распознаёт ключевые слова типов атрибутов, определённые в RFC 1779 и RFC 2253 (и перечисленные в getName(String format)), а также ключевые слова T, DNQ или DNQUALIFIER, SURNAME, GIVENNAME, INITIALS, GENERATION, EMAILADDRESS и SERIALNUMBER, чьи идентификаторы объектов (OID) определены в RFC 5280. Все остальные типы атрибутов должны быть заданы как OID.
Эта реализация применяет более строгий синтаксис OID, чем определённый в RFC 1779 и 2253. В ней используется более корректный синтаксис, определённый в RFC 4512, в котором указано, что OID должны содержать не менее двух цифр:
numericoid = number 1*( DOT number )
- Параметры:
-
name— различающееся имя X.500 в формате RFC 1779 или RFC 2253 - Исключения:
-
NullPointerException— еслиnameимеет значениеnull -
IllegalArgumentException— еслиnameзадано неправильно - Внешние спецификации
X500Principal
public X500Principal(String name, Map<String,String> keywordMap)
X500Principal из строкового представления различающегося имени X.500 (например: "CN=Duke, OU=JavaSoft, O=Sun Microsystems, C=US"). Различающееся имя должно быть задано с использованием грамматики, определённой в RFC 1779 или RFC 2253 (допускается любой из этих форматов). Этот конструктор распознаёт ключевые слова типов атрибутов, указанные в X500Principal(String), а также дополнительные ключевые слова, записи для которых содержатся в параметре keywordMap. Записи ключевых слов в keywordMap имеют приоритет перед ключевыми словами, распознаваемыми по умолчанию методом X500Principal(String). Ключевые слова ДОЛЖНЫ указываться только прописными буквами, в противном случае они будут игнорироваться. Неправильно заданные ключевые слова игнорируются; однако если ключевое слово в имени сопоставлено с неправильно заданным идентификатором объекта (OID), выбрасывается IllegalArgumentException. Разрешается, чтобы два разных ключевых слова соответствовали одному и тому же OID.
Эта реализация применяет более строгий синтаксис OID, чем определённый в RFC 1779 и 2253. В ней используется более корректный синтаксис, определённый в RFC 4512, в котором указано, что OID должны содержать не менее двух цифр:
numericoid = number 1*( DOT number )
- Параметры:
-
name— различающееся имя X.500 в формате RFC 1779 или RFC 2253 -
keywordMap— карта ключевых слов типов атрибутов, где каждому ключу — строке с ключевым словом — соответствует идентификатор объекта в виде строки (последовательность неотрицательных целых чисел, разделённых точками). Карта может быть пустой, но не может иметь значениеnull. - Исключения:
-
NullPointerException— еслиnameилиkeywordMapимеет значениеnull -
IllegalArgumentException— еслиnameзадано неправильно или ключевое слово вnameсопоставлено с OID в неверном формате - Начиная с:
- 1.6
- Внешние спецификации
X500Principal
public X500Principal(byte[] name)
X500Principal из различающегося имени в кодировке ASN.1 DER. Нотация 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)
X500Principal из InputStream, содержащего различающееся имя в кодировке ASN.1 DER. Нотация ASN.1 для этой структуры приведена в документации к X500Principal(byte[] name). Позиция чтения входного потока устанавливается на следующий доступный байт после закодированного различающегося имени.
- Параметры:
-
is—InputStream, содержащий различающееся имя в кодировке ASN.1 DER - Исключения:
-
NullPointerException— еслиInputStreamимеет значениеnull -
IllegalArgumentException— если возникает ошибка кодирования (неверный формат DN)
Подробное описание методов
getName
getName
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. Строка, возвращаемая этим методом, — это строка Unicode, полученная декодированием данного представления UTF-8.
Если в качестве формата указано "CANONICAL", этот метод возвращает соответствующее RFC 2253 строковое представление со следующими дополнительными канонизациями:
- Ведущие нули удаляются из типов атрибутов, закодированных в виде десятичных OID, разделённых точками
- Значения атрибутов DirectoryString типа PrintableString и UTF8String не выводятся в шестнадцатеричном формате
- Значения атрибутов DirectoryString типов, отличных от PrintableString и UTF8String, выводятся в шестнадцатеричном формате
- Начальные и конечные пробельные символы удаляются из не шестнадцатеричных значений атрибутов (если только значение не состоит целиком из пробельных символов)
- Внутренние последовательности из одного или нескольких пробельных символов заменяются одним пробелом в не шестнадцатеричных значениях атрибутов
- Относительные различающиеся имена, содержащие более одного утверждения значения атрибута (AVA), выводятся в следующем порядке: сначала AVA со стандартными ключевыми словами в алфавитном порядке, затем AVA с ключевыми словами OID в числовом порядке.
- В значениях атрибутов экранируются только символы, которые согласно разделу 2.4 RFC 2253 должны быть экранированы (перед ними ставится обратная косая черта)
- Всё имя преобразуется в верхний регистр с использованием
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)
IllegalArgumentException. Этот метод возвращает строки в формате, заданном в getName(String), а также выводит дополнительные ключевые слова типов атрибутов для OID, записи которых содержатся в параметре oidMap. Записи OID в oidMap имеют приоритет перед OID, распознаваемыми по умолчанию методом getName(String). Неправильно заданные OID игнорируются; однако если OID в имени сопоставлен с неправильно заданным ключевым словом, выбрасывается IllegalArgumentException.
В будущем могут быть добавлены другие стандартные форматы.
Предупреждение: дополнительные ключевые слова типов атрибутов могут не распознаваться другими реализациями; поэтому не используйте этот метод, если не уверены, что другие реализации распознают эти ключевые слова.
- Параметры:
-
format— используемый формат -
oidMap— карта OID, где каждому ключу — идентификатору объекта в виде строки (последовательность неотрицательных целых чисел, разделённых точками) — соответствует строка с ключевым словом типа атрибута. Карта может быть пустой, но не может иметь значениеnull. - Возвращает:
- строковое представление этого
X500Principalв указанном формате - Исключения:
-
IllegalArgumentException— если указанный формат недопустим, равен null или OID в имени сопоставлен с неправильно заданным ключевым словом -
NullPointerException— еслиoidMapимеет значениеnull - Начиная с:
- 1.6
getEncoded
public byte[] getEncoded()
X500Principal(byte[] name). Обратите внимание, что возвращаемый массив байтов клонируется для защиты от последующих изменений.
- Возвращает:
- массив байтов, содержащий различающееся имя в кодировке ASN.1 DER
toString
equals
public boolean equals(Object o)
Object с этим X500Principal на равенство. В частности, этот метод возвращает true, если Object o является X500Principal и канонические строковые представления этого объекта и o (полученные с помощью метода getName(X500Principal.CANONICAL)) равны.
Эта реализация соответствует требованиям RFC 5280.
hashCode
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/javax/security/auth/x500/X500Principal.html