Spec-Zone.ru › OpenJDK 17

Класс X500Principal

java.lang.Object
javax.security.auth.x500.X500Principal
Все реализуемые интерфейсы:
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 (Object Identifiers) определены в RFC 5280: Internet X.509 Public Key Infrastructure Certificate and CRL Profile.

Строковое представление этого X500Principal можно получить, вызвав методы getName.

Обратите внимание, что методы getSubjectX500Principal и getIssuerX500Principal класса X509Certificate возвращают объекты X500Principal, представляющие поля эмитента и субъекта сертификата.

С тех пор как:
1.4
См. также:
  • X509Certificate
  • Сериализованная форма

Краткое описание полей

Модификатор и тип Поле Описание
static final String CANONICAL
Канонический строковый формат различительных имен.
static final String RFC1779
Строковый формат различительных имен RFC 1779.
static final String RFC2253
Строковый формат различительных имен RFC 2253.

Краткое описание конструкторов

Конструктор Описание
X500Principal(byte[] name)
Создаёт X500Principal из различительного имени в закодированной форме ASN.1 DER.
X500Principal(InputStream is)
Создаёт X500Principal из InputStream, содержащего различительное имя в закодированной форме ASN.1 DER.
X500Principal(String name)
Создаёт X500Principal из строкового представления различительного имени X.500 (например: "CN=Duke, OU=JavaSoft, O=Sun Microsystems, C=US").
X500Principal(String name, Map<String,String> keywordMap)
Создаёт X500Principal из строкового представления различительного имени X.500 (например: "CN=Duke, OU=JavaSoft, O=Sun Microsystems, C=US").

Краткое описание методов

Модификатор и тип Метод Описание
boolean equals(Object o)
Сравнивает указанный Object с этим X500Principal на равенство.
byte[] getEncoded()
Возвращает различительное имя в закодированной форме ASN.1 DER.
String getName()
Возвращает строковое представление различительного имени X.500 в формате, определенном в RFC 2253.
String getName(String format)
Возвращает строковое представление различительного имени X.500 в указанном формате.
String getName(String format, Map<String,String> oidMap)
Возвращает строковое представление различительного имени X.500 в указанном формате.
int hashCode()
Возвращает хэш-код для этого X500Principal.
String toString()
Возвращает удобочитаемое строковое представление этого X500Principal.

Методы, объявленные в классе java.lang.Object

clone, finalize, getClass, notify, notifyAll, wait, wait, wait

Методы, объявленные в интерфейсе java.security.Principal

implies

Подробное описание полей

RFC1779

public static final String RFC1779
Формат строк имён, определённый в RFC 1779.
См. также:
  • Значения константных полей

RFC2253

public static final String RFC2253
Формат строк имён, определённый в RFC 2253.
См. также:
  • Значения константных полей

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 содержит как минимум 2 цифры:

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. Допустимо иметь 2 разных ключевых слова, отображающиеся на один и тот же OID.

Эта реализация применяет более жёсткие ограничения к синтаксису OID, чем определено в RFC 1779 и 2253. Она использует более корректный синтаксис, определённый в RFC 4512, который предписывает, что OID содержит как минимум 2 цифры:

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 - если произошла ошибка кодирования (неверный формат для имени)

X500Principal

public X500Principal(InputStream is)
Создаёт X500Principal из потока, содержащего имя в кодировке ASN.1 DER. ASN.1 запись для этой структуры описана в документации к X500Principal(byte[] name).

Позиция чтения в потоке установлена в следующий доступный байт после закодированного имени.

Параметры:
is - поток, содержащий имя в кодировке ASN.1 DER
Исключения:
NullPointerException - если поток InputStream имеет null вид
IllegalArgumentException - если произошла ошибка кодирования (неверный формат для имени)

Подробное описание методов

getName

public String getName()
Возвращает строковое представление имени X.500, используя формат, определённый в RFC 2253.

Этот метод эквивалентен вызову getName(X500Principal.RFC2253).

Указано в:
getName в интерфейсе Principal
Возвращает:
имя X.500

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.

Если "CANONICAL" задан как формат, этот метод возвращает строку в формате RFC 2253 с дополнительными канонизациями:

  1. Лишние нули удаляются из типов атрибутов, закодированных как OID десятичных дробей
  2. Значения атрибутов типа DirectoryString, PrintableString и UTF8String, не выводятся в шестнадцатеричном формате
  3. Значения атрибутов типа DirectoryString, отличные от PrintableString и UTF8String, выводятся в шестнадцатеричном формате
  4. Лишние пробелы в начале и конце значений атрибутов (кроме значений, состоящих только из пробелов) удаляются
  5. Внутренние подстроки из одного или нескольких пробелов в значениях атрибутов заменяются одним пробелом
  6. Относительные имена, содержащие более одного утверждения значения атрибута (AVA), выводятся в следующем порядке: алфавитный порядок AVA, содержащих стандартные ключевые слова, за которым следует числовой порядок AVA, содержащих ключевые слова OID
  7. Единственными символами в значениях атрибутов, которые требуют экранирования, являются те, которые, как указано в разделе 2.4 RFC 2253, должны быть экранированы (они экранируются с помощью предшествующего символа обратного слэша)
  8. Всё имя преобразуется в верхний регистр с помощью String.toUpperCase(Locale.US)
  9. Всё имя преобразуется в нижний регистр с помощью String.toLowerCase(Locale.US)
  10. Имя окончательно нормализуется с помощью нормализации формы KD, как описано в стандарте Юникода и 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 параметре. Записи ИД в параметре oidMap имеют приоритет над стандартными ИД, распознаваемыми getName(String). Неправильно указанные ИД игнорируются; однако если ИД в имени сопоставляется с неправильно указанным ключевым словом, бросается исключение IllegalArgumentException.

Дополнительные стандартные форматы могут быть добавлены в будущем.

Предупреждение: дополнительные ключевые слова типа атрибута могут не распознаваться другими реализациями; поэтому не используйте этот метод, если не уверены, что эти ключевые слова будут распознаны другими реализациями.

Parameters:
format - используемый формат
oidMap - карта ИД, где каждый ключ — идентификатор объекта в строковом виде (последовательность неотрицательных целых чисел, разделенных точками), который сопоставляется с соответствующим строковым ключевым словом типа атрибута. Карта может быть пустой, но никогда не null.
Returns:
строковое представление этого X500Principal в указанном формате
Throws:
IllegalArgumentException - если указанный формат недопустим, null или ИД в имени сопоставляется с неправильно указанным ключевым словом
NullPointerException - если oidMap null
Since:
1.6

getEncoded

public byte[] getEncoded()
Возвращает имя в кодировке ASN.1 DER. Нотация ASN.1 для этой структуры приведена в документации для X500Principal(byte[] name).

Обратите внимание, что возвращаемый массив байтов клонируется для защиты от последующих изменений.

Returns:
массив байтов, содержащий имя в кодировке ASN.1 DER

toString

public String toString()
Возвращает удобное для пользователя строковое представление этого X500Principal.
Specified by:
toString в интерфейсе Principal
Overrides:
toString в классе Object
Returns:
строковое представление этого X500Principal

equals

public boolean equals(Object o)
Сравнивает указанное Object с этим X500Principal на равенство.

Конкретно, этот метод возвращает true, если Object o является X500Principal и если соответствующие канонические строковые представления (полученные через метод getName(X500Principal.CANONICAL) ) этого объекта и o равны.

Эта реализация соответствует требованиям RFC 5280.

Specified by:
equals в интерфейсе Principal
Overrides:
equals в классе Object
Parameters:
o - Объект, сравниваемый на равенство с этим X500Principal
Returns:
true , если указанное Object равно этому X500Principal, false в противном случае
See Also:
  • Object.hashCode()
  • HashMap

hashCode

public int hashCode()
Возвращает хэш-код для этого X500Principal.

Хэш-код рассчитывается следующим образом: getName(X500Principal.CANONICAL).hashCode()

Specified by:
hashCode в интерфейсе Principal
Overrides:
hashCode в классе Object
Returns:
хэш-код для этого X500Principal
See Also:
  • Object.equals(java.lang.Object)
  • System.identityHashCode(java.lang.Object)

© 1993, 2021, 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/17/docs/api/java.base/javax/security/auth/x500/X500Principal.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API