Интерфейс X509Extension

Все известные реализующие классы:
X509Certificate, X509CRL, X509CRLEntry
public interface X509Extension

Интерфейс для расширения X.509.

Расширения, определённые для X.509 v3 Certificates и v2 CRLs (списки отозванных сертификатов), предоставляют методы для связывания дополнительных атрибутов с пользователями или открытыми ключами, для управления иерархией сертификатов и для управления распределением списков отозванных сертификатов. Формат расширений X.509 также позволяет сообществам определять частные расширения для переноса информации, уникальной для этих сообществ.

Каждое расширение в сертификате/списке отозванных сертификатов может быть обозначено как критическое или некритическое. Система, использующая сертификат/список отозванных сертификатов (приложение, проверяющее сертификат/список отозванных сертификатов), должна отклонить сертификат/список отозванных сертификатов, если она обнаружит критическое расширение, которое ей не известно. Некритическое расширение может быть проигнорировано, если оно не распознано.

Определение ASN.1 для этого:

Extensions  ::=  SEQUENCE SIZE (1..MAX) OF Extension

 Extension  ::=  SEQUENCE  {
     extnId        OBJECT IDENTIFIER,
     critical      BOOLEAN DEFAULT FALSE,
     extnValue     OCTET STRING
                   -- contains a DER encoding of a value
                   -- of the type registered for use with
                   -- the extnId object identifier value
 }
Поскольку все расширения не известны, метод getExtensionValue возвращает DER-кодированную строку OCTET значения расширения (то есть, extnValue). Затем этим можно воспользоваться классу, понимающему это расширение.
С:
1.2

Методы

Модификатор и типМетодОписание
Set<String>getCriticalExtensionOIDs()

Получает набор строк OID для расширения(ий), помеченных КРИТИЧЕСКИМ в сертификате/списке отозванных сертификатов, управляемом объектом, реализующим данный интерфейс.

byte[]getExtensionValue​(String oid)

Получает DER-кодированную строку OCTET для значения расширения (extnValue), идентифицированного переданной строкой oid.

Set<String>getNonCriticalExtensionOIDs()

Получает набор строк OID для расширения(ий), помеченных НЕКРИТИЧЕСКИМ в сертификате/списке отозванных сертификатов, управляемом объектом, реализующим данный интерфейс.

booleanhasUnsupportedCriticalExtension()

Проверяет, есть ли критическое расширение, которое не поддерживается.

Методы

hasUnsupportedCriticalExtension()

boolean hasUnsupportedCriticalExtension()

Проверяет, есть ли критическое расширение, которое не поддерживается.

Возвращает:
true если найдено критическое расширение, которое не поддерживается, в противном случае false.

getCriticalExtensionOIDs()

Set<String> getCriticalExtensionOIDs()

Получает набор строк OID для расширения(ий), помеченных КРИТИЧЕСКИМ в сертификате/списке отозванных сертификатов, управляемом объектом, реализующим данный интерфейс. Вот пример кода получения набора критических расширений из X509Certificate и вывода OID:

X509Certificate cert = null;
 try (InputStream inStrm = new FileInputStream("DER-encoded-Cert")) {
     CertificateFactory cf = CertificateFactory.getInstance("X.509");
     cert = (X509Certificate)cf.generateCertificate(inStrm);
 }

 Set<String> critSet = cert.getCriticalExtensionOIDs();
 if (critSet != null && !critSet.isEmpty()) {
     System.out.println("Set of critical extensions:");
     for (String oid : critSet) {
         System.out.println(oid);
     }
 }

Возвращает:
набор (или пустой набор, если ни одно не помечено как критическое) строк OID расширения для расширений, помеченных как критические. Если расширения вообще отсутствуют, метод возвращает null.

getNonCriticalExtensionOIDs()

Set<String> getNonCriticalExtensionOIDs()

Получает набор строк OID для расширения(ий), помеченных НЕКРИТИЧЕСКИМ в сертификате/списке отозванных сертификатов, управляемом объектом, реализующим данный интерфейс. Вот пример кода получения набора некритических расширений из записи отозванного сертификата X509CRL и вывода OID:

CertificateFactory cf = null;
 X509CRL crl = null;
 try (InputStream inStrm = new FileInputStream("DER-encoded-CRL")) {
     cf = CertificateFactory.getInstance("X.509");
     crl = (X509CRL)cf.generateCRL(inStrm);
 }

 byte[] certData = <DER-encoded certificate data>
 ByteArrayInputStream bais = new ByteArrayInputStream(certData);
 X509Certificate cert = (X509Certificate)cf.generateCertificate(bais);
 X509CRLEntry badCert =
              crl.getRevokedCertificate(cert.getSerialNumber());

 if (badCert != null) {
     Set<String> nonCritSet = badCert.getNonCriticalExtensionOIDs();
     if (nonCritSet != null)
         for (String oid : nonCritSet) {
             System.out.println(oid);
         }
 }

Возвращает:
набор (или пустой набор, если ни одно не помечено как некритическое) строк OID расширения для расширений, помеченных как некритические. Если расширения вообще отсутствуют, метод возвращает null.

getExtensionValue(java.lang.String)

byte[] getExtensionValue(String oid)

Получает DER-кодированную строку OCTET для значения расширения (extnValue), идентифицированного переданной строкой oid. Строка oid представлена набором неотрицательных целых чисел, разделённых точками.

Например:

OID (Идентификатор объекта)Название расширения
2.5.29.14SubjectKeyIdentifier
2.5.29.15KeyUsage
2.5.29.16PrivateKeyUsage
2.5.29.17SubjectAlternativeName
2.5.29.18IssuerAlternativeName
2.5.29.19BasicConstraints
2.5.29.30NameConstraints
2.5.29.33PolicyMappings
2.5.29.35AuthorityKeyIdentifier
2.5.29.36PolicyConstraints
Параметры:
oid - значение идентификатора объекта для расширения.
Возвращает:
DER-кодированную строку octet значения расширения или null, если она отсутствует.

© 1993, 2020, 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/11/docs/api/java.base/java/security/cert/X509Extension.html

Spec-Zone .ru
спецификации, руководства, описания, API