Класс CertificateFactory

public class CertificateFactory
extends Object

Этот класс определяет функциональность фабрики сертификатов, которая используется для генерации объектов сертификатов, цепочек сертификации (CertPath) и списков отзыва сертификатов (CRL) из их кодировок.

Для кодировок, состоящих из нескольких сертификатов, используйте generateCertificates, когда вы хотите разобрать коллекцию, возможно, не связанных сертификатов. В противном случае, используйте generateCertPath, когда вы хотите сгенерировать CertPath (цепь сертификатов) и затем валидировать её с помощью CertPathValidator.

Фабрика сертификатов для X.509 должна возвращать сертификаты, которые являются экземплярами java.security.cert.X509Certificate, и CRL, которые являются экземплярами java.security.cert.X509CRL.

Следующий пример считывает файл с кодированными в Base64 сертификатами, каждый из которых ограничен в начале -----BEGIN CERTIFICATE-----, а в конце -----END CERTIFICATE-----. Мы преобразуем FileInputStream (которая не поддерживает mark и reset) в BufferedInputStream (которая поддерживает эти методы), чтобы каждый вызов generateCertificate потреблял только один сертификат, а позиция чтения входного потока устанавливалась на следующий сертификат в файле:

FileInputStream fis = new FileInputStream(filename);
 BufferedInputStream bis = new BufferedInputStream(fis);

 CertificateFactory cf = CertificateFactory.getInstance("X.509");

 while (bis.available() > 0) {
    Certificate cert = cf.generateCertificate(bis);
    System.out.println(cert.toString());
 }

Следующий пример анализирует ответ сертификата в формате PKCS#7, хранящийся в файле, и извлекает все сертификаты из него:

FileInputStream fis = new FileInputStream(filename);
 CertificateFactory cf = CertificateFactory.getInstance("X.509");
 Collection c = cf.generateCertificates(fis);
 Iterator i = c.iterator();
 while (i.hasNext()) {
    Certificate cert = (Certificate)i.next();
    System.out.println(cert);
 }

Каждая реализация Java платформы обязана поддерживать следующие стандартные типы CertificateFactory:

  • X.509
и следующие стандартные кодировки CertPath:
  • PKCS7
  • PkiPath
Тип и кодировки описаны в разделе раздела CertificateFactory и раздела CertPath Encodings спецификации Java Security Standard Algorithm Names. Обратитесь к документации выпуска вашей реализации, чтобы узнать, поддерживаются ли какие-либо другие типы или кодировки.
С момента:
1.2
См. также:
Certificate, X509Certificate, CertPath, CRL, X509CRL

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

Модификатор Конструктор Описание
protected CertificateFactory​(CertificateFactorySpi certFacSpi, Provider provider, String type)

Создаёт объект CertificateFactory заданного типа и инкапсулирует указанную реализацию провайдера (объект SPI) в нём.

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

Модификатор и тип Метод Описание
Certificate generateCertificate​(InputStream inStream)

Генерирует объект сертификата и инициализирует его данными, считанными из входного потока inStream.

Collection<? extends Certificate> generateCertificates​(InputStream inStream)

Возвращает (возможно, пустую) коллекцию представлений сертификатов, считанных из указанного входного потока inStream.

CertPath generateCertPath​(InputStream inStream)

Генерирует объект CertPath и инициализирует его данными, считанными из InputStream inStream.

CertPath generateCertPath​(InputStream inStream, String encoding)

Генерирует объект CertPath и инициализирует его данными, считанными из InputStream inStream.

CertPath generateCertPath​(List<? extends Certificate> certificates)

Генерирует объект CertPath и инициализирует его List из Certificate.

CRL generateCRL​(InputStream inStream)

Генерирует объект списка отзыва сертификатов (CRL) и инициализирует его данными, считанными из входного потока inStream.

Collection<? extends CRL> generateCRLs​(InputStream inStream)

Возвращает (возможно, пустую) коллекцию представлений CRL, считанных из указанного входного потока inStream.

Iterator<String> getCertPathEncodings()

Возвращает итератор по CertPath кодировкам, поддерживаемым этой фабрикой сертификатов, с первой кодировкой по умолчанию.

static CertificateFactory getInstance​(String type)

Возвращает объект фабрики сертификатов, реализующий указанный тип сертификата.

static CertificateFactory getInstance​(String type, String provider)

Возвращает объект фабрики сертификатов для указанного типа сертификата.

static CertificateFactory getInstance​(String type, Provider provider)

Возвращает объект фабрики сертификатов для указанного типа сертификата.

Provider getProvider()

Возвращает провайдера этой фабрики сертификатов.

String getType()

Возвращает имя типа сертификата, связанного с этой фабрикой сертификатов.

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

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Конструкторы

CertificateFactory

protected CertificateFactory(CertificateFactorySpi certFacSpi,
                             Provider provider,
                             String type)

Создаёт объект CertificateFactory заданного типа и инкапсулирует в нём указанную реализацию провайдера (объект SPI).

Параметры:
certFacSpi - реализация провайдера.
provider - провайдер.
type - тип сертификата.

Методы

getInstance

public static final CertificateFactory getInstance(String type)
                                            throws CertificateException

Возвращает объект фабрики сертификатов, реализующий указанный тип сертификата.

Этот метод перебирает список зарегистрированных провайдеров безопасности, начиная с наиболее предпочтительного. Возвращается новый объект CertificateFactory, инкапсулирующий реализацию CertificateFactorySpi от первого провайдера, поддерживающего указанный тип.

Обратите внимание, что список зарегистрированных провайдеров можно получить с помощью метода Security.getProviders().

Примечание об реализации:
Реализация JDK дополнительно использует свойство jdk.security.provider.preferred Security, чтобы определить предпочтительный порядок провайдеров для указанного алгоритма. Это может отличаться от порядка провайдеров, возвращаемых методом Security.getProviders().
Параметры:
type - имя запрошенного типа сертификата. См. раздел CertificateFactory в Спецификации Java Security Standard Algorithm Names для получения информации о стандартных типах сертификатов.
Возвращает:
объект фабрики сертификатов для указанного типа
Исключения:
CertificateException - если ни один Provider не поддерживает реализацию CertificateFactorySpi для указанного типа
NullPointerException - если type является null
См. также:
Provider

getInstance

public static final CertificateFactory getInstance(String type,
                                                   String provider)
                                            throws CertificateException,
                                                   NoSuchProviderException

Возвращает объект фабрики сертификатов для указанного типа сертификата.

Возвращается новый объект CertificateFactory, инкапсулирующий реализацию CertificateFactorySpi от указанного провайдера. Указанный провайдер должен быть зарегистрирован в списке провайдеров безопасности.

Обратите внимание, что список зарегистрированных провайдеров можно получить с помощью метода Security.getProviders().

Параметры:
type - тип сертификата. См. раздел CertificateFactory в Спецификации Java Security Standard Algorithm Names для получения информации о стандартных типах сертификатов.
provider - имя провайдера.
Возвращает:
объект фабрики сертификатов для указанного типа
Исключения:
CertificateException - если реализация CertificateFactorySpi для указанного алгоритма недоступна от указанного провайдера
IllegalArgumentException - если имя провайдера является null или пустым
NoSuchProviderException - если указанный провайдер не зарегистрирован в списке провайдеров безопасности
NullPointerException - если type является null
См. также:
Provider

getInstance

public static final CertificateFactory getInstance(String type,
                                                   Provider provider)
                                            throws CertificateException

Возвращает объект фабрики сертификатов для указанного типа сертификата.

Возвращается новый объект CertificateFactory, инкапсулирующий реализацию CertificateFactorySpi от указанного объекта Provider. Обратите внимание, что указанный объект Provider не обязательно должен быть зарегистрирован в списке провайдеров.

Параметры:
type - тип сертификата. См. раздел CertificateFactory в Спецификации Java Security Standard Algorithm Names для получения информации о стандартных типах сертификатов.
provider - провайдер.
Возвращает:
объект фабрики сертификатов для указанного типа
Исключения:
CertificateException - если реализация CertificateFactorySpi для указанного алгоритма недоступна от указанного объекта Provider
IllegalArgumentException - если provider является null
NullPointerException - если type является null
С момента:
1.4
См. также:
Provider

getProvider

public final Provider getProvider()

Возвращает провайдера этой фабрики сертификатов.

Возвращает:
провайдер этой фабрики сертификатов.

getType

public final String getType()

Возвращает имя типа сертификата, связанного с этой фабрикой сертификатов.

Возвращает:
имя типа сертификата, связанного с этой фабрикой сертификатов.

generateCertificate

public final Certificate generateCertificate(InputStream inStream)
                                      throws CertificateException

Генерирует объект сертификата и инициализирует его данными, считанными из потока ввода inStream.

Для использования специализированного формата сертификата, поддерживаемого этой фабрикой сертификатов, возвращаемый объект сертификата можно привести к соответствующему классу сертификата. Например, если эта фабрика сертификатов реализует сертификаты X.509, возвращаемый объект сертификата можно привести к классу X509Certificate.

В случае фабрики сертификатов для сертификатов X.509, сертификат, предоставленный в inStream, должен быть закодирован в DER и может быть предоставлен в двоичном или печатном (Base64) кодировании. Если сертификат предоставлен в кодировании Base64, он должен быть ограничен в начале -----BEGIN CERTIFICATE-----, и должен быть ограничен в конце -----END CERTIFICATE-----.

Обратите внимание, что если предоставленный поток ввода не поддерживает mark и reset, этот метод будет потреблять весь поток ввода. В противном случае каждый вызов этого метода потребляет один сертификат, а позиция чтения потока ввода устанавливается на следующий доступный байт после собственного маркера конца сертификата. Если данные в потоке ввода не содержат встроенного маркера конца сертификата (кроме EOF) и после разбора сертификата есть данные, остающиеся необработанными, выбрасывается CertificateException.

Параметры:
inStream - поток ввода с данными сертификата.
Возвращает:
объект сертификата, инициализированный данными из потока ввода.
Исключения:
CertificateException - при ошибках разбора.

getCertPathEncodings

public final Iterator<String> getCertPathEncodings()

Возвращает итератор поддерживаемых этой фабрикой сертификатов кодировок CertPath, при этом кодировка по умолчанию расположена первой. См. раздел CertPath Encodings в Спецификации Java Security Standard Algorithm Names для получения информации о стандартных именах кодирования и их форматах.

Попытки изменить возвращаемый Iterator с помощью метода remove приводят к исключению UnsupportedOperationException.

Возвращает:
итератор по именам поддерживаемых кодировок CertPath (как строки)
С момента:
1.4

generateCertPath

public final CertPath generateCertPath(InputStream inStream)
                                throws CertificateException

Генерирует объект CertPath и инициализирует его данными, считанными из потока InputStream inStream. Данные предполагаются в кодировке по умолчанию. Название кодировки по умолчанию - это первый элемент Iterator возвращаемого методом getCertPathEncodings.

Параметры:
inStream - поток ввода содержащий данные
Возвращает:
объект CertPath инициализированный данными из потока InputStream
Исключения:
CertificateException - если возникает исключение во время декодирования
С момента:
1.4

generateCertPath

public final CertPath generateCertPath(InputStream inStream,
                                       String encoding)
                                throws CertificateException

Генерирует объект CertPath и инициализирует его данными, считанными из потока InputStream inStream. Данные предполагаются в указанной кодировке. См. раздел CertPath Encodings в Спецификации Java Security Standard Algorithm Names для получения информации о стандартных именах кодирования и их форматах.

Параметры:
inStream - поток ввода содержащий данные
encoding - кодировка, используемая для данных
Возвращает:
объект CertPath инициализированный данными из потока InputStream
Исключения:
CertificateException - если возникает исключение во время декодирования или запрошенная кодировка не поддерживается
С момента:
1.4

generateCertPath

public final CertPath generateCertPath(List<? extends Certificate> certificates)
                                throws CertificateException

Генерирует объект CertPath и инициализирует его списком List сертификатов.

Предоставленные сертификаты должны быть типа, поддерживаемого CertificateFactory. Они будут скопированы из предоставленного объекта List.

Параметры:
certificates - список List сертификатов
Возвращает:
объект CertPath инициализированный предоставленным списком сертификатов
Исключения:
CertificateException - если возникает исключение
С момента:
1.4

generateCertificates

public final Collection<? extends Certificate> generateCertificates(InputStream inStream)
                                                             throws CertificateException

Возвращает (возможно, пустую) коллекцию представлений сертификатов, прочитанных из заданного потока ввода inStream.

Для использования специализированного формата сертификатов, поддерживаемого этим фабричным объектом сертификатов, каждый элемент в возвращаемой коллекции представлений может быть приведён к соответствующему классу сертификатов. Например, если этот фабричный объект реализует X.509 сертификаты, элементы в возвращаемой коллекции могут быть приведённы к классу X509Certificate.

В случае фабричного объекта для X.509 сертификатов, inStream может содержать последовательность DER-кодированных сертификатов в форматах, описанных для generateCertificate. Кроме того, inStream может содержать цепочку сертификатов PKCS#7. Это объект PKCS#7 SignedData, где единственным значимым полем является certificates. В частности, подпись и содержимое игнорируются. Этот формат позволяет загружать сразу несколько сертификатов. Если сертификаты отсутствуют, возвращается пустая коллекция.

Обратите внимание, что если заданный поток ввода не поддерживает mark и reset, этот метод прочитает весь поток ввода.

Parameters:
inStream - поток ввода с сертификатами.
Returns:
коллекция представлений объектов java.security.cert.Certificate, инициализированных данными из потока ввода.
Throws:
CertificateException - при ошибках парсинга.

generateCRL

public final CRL generateCRL(InputStream inStream)
                      throws CRLException

Генерирует объект списка отзыва сертификатов (CRL) и инициализирует его данными, прочитанными из потока ввода inStream.

Для использования специализированного формата CRL, поддерживаемого этим фабричным объектом, возвращаемый объект CRL может быть приведён к соответствующему классу CRL. Например, если этот фабричный объект реализует X.509 CRL, возвращаемый объект CRL может быть приведён к классу X509CRL.

Обратите внимание, что если заданный поток ввода не поддерживает mark и reset, этот метод прочитает весь поток ввода. В противном случае каждый вызов этого метода считывает один CRL, а позиция чтения потока ввода устанавливается в следующий байт после неявной метки конца CRL. Если данные в потоке ввода не содержат неявной метки конца CRL (кроме EOF) и после парсинга CRL есть хвостовые данные, будет выброшено исключение CRLException.

Parameters:
inStream - поток ввода с данными CRL.
Returns:
объект CRL, инициализированный данными из потока ввода.
Throws:
CRLException - при ошибках парсинга.

generateCRLs

public final Collection<? extends CRL> generateCRLs(InputStream inStream)
                                             throws CRLException

Возвращает (возможно, пустую) коллекцию представлений списков отзыва сертификатов (CRLs), прочитанных из заданного потока ввода inStream.

Для использования специализированного формата CRL, поддерживаемого этим фабричным объектом, каждый элемент в возвращаемой коллекции представлений может быть приведён к соответствующему классу CRL. Например, если этот фабричный объект реализует X.509 CRL, элементы в возвращаемой коллекции могут быть приведённы к классу X509CRL.

В случае фабричного объекта для X.509 CRL, inStream может содержать последовательность DER-кодированных CRL. Кроме того, inStream может содержать набор CRL PKCS#7. Это объект PKCS#7 SignedData, где единственным значимым полем является crls. В частности, подпись и содержимое игнорируются. Этот формат позволяет загружать сразу несколько CRL. Если CRL отсутствуют, возвращается пустая коллекция.

Обратите внимание, что если заданный поток ввода не поддерживает mark и reset, этот метод прочитает весь поток ввода.

Parameters:
inStream - поток ввода со списками отзыва сертификатов.
Returns:
коллекция представлений объектов java.security.cert.CRL, инициализированных данными из потока ввода.
Throws:
CRLException - при ошибках парсинга.

© 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/CertificateFactory.html

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