Класс 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: PKCS7PkiPath
- С:
- 1.2
- См. также:
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Создаёт объект CertificateFactory указанного типа и инкапсулирует заданную реализацию поставщика (объект SPI) в нём. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
final Certificate |
generateCertificate |
Генерирует объект сертификата и инициализирует его данными, прочитанными из входного потока inStream. |
final Collection<? extends Certificate> |
generateCertificates |
Возвращает (возможно, пустую) коллекцию представлений сертификатов, прочитанных из заданного входного потока inStream. |
final CertPath |
generateCertPath |
Генерирует объект CertPath и инициализирует его данными, прочитанными из InputStream в inStream. |
final CertPath |
generateCertPath |
Генерирует объект CertPath и инициализирует его данными, прочитанными из InputStream inStream. |
final CertPath |
generateCertPath |
Генерирует объект CertPath и инициализирует его с List из Certificate. |
final CRL |
generateCRL |
Генерирует объект списка отзыва сертификатов (CRL) и инициализирует его данными, прочитанными из входного потока inStream. |
final Collection<? extends CRL> |
generateCRLs |
Возвращает (возможно, пустую) коллекцию представлений CRL, прочитанных из заданного входного потока inStream. |
final Iterator<String> |
getCertPathEncodings() |
Возвращает итератор CertPath кодировок, поддерживаемых этой фабрикой сертификатов, с использованием по умолчанию кодировки в первую очередь. |
static final CertificateFactory |
getInstance |
Возвращает объект фабрики сертификатов, реализующий указанный тип сертификата. |
static final CertificateFactory |
getInstance |
Возвращает объект фабрики сертификатов для указанного типа сертификата. |
static final CertificateFactory |
getInstance |
Возвращает объект фабрики сертификатов для указанного типа сертификата. |
final Provider |
getProvider() |
Возвращает поставщика этой фабрики сертификатов. |
final String |
getType() |
Возвращает имя типа сертификата, связанного с этой фабрикой сертификатов. |
Подробное описание конструкторов
CertificateFactory
protected CertificateFactory(CertificateFactorySpi certFacSpi, Provider provider, String type)
- Параметры:
-
certFacSpi- реализация провайдера. -
provider- провайдер. -
type- тип сертификата.
Подробное описание методов
getInstance
public static final CertificateFactory getInstance(String type) throws CertificateException
Этот метод проходит по списку зарегистрированных поставщиков безопасности, начиная с предпочтительного. Возвращается новый объект CertificateFactory, инкапсулирующий реализацию CertificateFactorySpi из первого поставщика, поддерживающего указанный тип.
Обратите внимание, что список зарегистрированных поставщиков можно получить через метод Security.getProviders().
- Примечание о реализации:
- Реализация JDK Reference дополнительно использует свойство
jdk.security.provider.preferredSecurity, чтобы определить предпочтительный порядок поставщиков для указанного алгоритма. Это может отличаться от порядка поставщиков, возвращаемого методомSecurity.getProviders(). - Параметры:
-
type- имя запрашиваемого типа сертификата. Справочная информация о стандартных типах сертификатов содержится в разделе CertificateFactory спецификации Java Security Standard Algorithm Names Specification. - Возвращает:
- объект фабрики сертификатов для указанного типа
- Исключения:
-
CertificateException- если ни одинProviderне поддерживает реализациюCertificateFactorySpiдля указанного типа -
NullPointerException- еслиtypeявляетсяnull - См. также:
getInstance
public static final CertificateFactory getInstance(String type, String provider) throws CertificateException, NoSuchProviderException
Возвращается новый объект CertificateFactory, инкапсулирующий реализацию CertificateFactorySpi из указанного поставщика. Указанный поставщик должен быть зарегистрирован в списке поставщиков безопасности.
Обратите внимание, что список зарегистрированных поставщиков можно получить через метод Security.getProviders().
- Параметры:
-
type- тип сертификата. Справочная информация о стандартных типах сертификатов содержится в разделе CertificateFactory спецификации Java Security Standard Algorithm Names Specification. -
provider- имя поставщика. - Возвращает:
- объект фабрики сертификатов для указанного типа
- Исключения:
-
CertificateException- если реализацияCertificateFactorySpiдля указанного алгоритма недоступна у указанного поставщика -
IllegalArgumentException- если имя поставщика являетсяnullили пустым -
NoSuchProviderException- если указанный поставщик не зарегистрирован в списке поставщиков безопасности -
NullPointerException- еслиtypeявляетсяnull - См. также:
getInstance
public static final CertificateFactory getInstance(String type, Provider provider) throws CertificateException
Возвращается новый объект CertificateFactory, инкапсулирующий реализацию CertificateFactorySpi из указанного объекта Provider. Обратите внимание, что указанный объект Provider не обязательно должен быть зарегистрирован в списке поставщиков.
- Параметры:
-
type- тип сертификата. Справочная информация о стандартных типах сертификатов содержится в разделе CertificateFactory спецификации Java Security Standard Algorithm Names Specification. -
provider- поставщик. - Возвращает:
- объект фабрики сертификатов для указанного типа
- Исключения:
-
CertificateException- если реализацияCertificateFactorySpiдля указанного алгоритма недоступна из указанного объектаProvider -
IllegalArgumentException- еслиproviderявляетсяnull -
NullPointerException- еслиtypeявляетсяnull - С тех пор как:
- 1.4
- См. также:
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 Specification. Попытки изменить возвращаемый Iterator через метод remove приводят к UnsupportedOperationException.
- Возвращает:
- итератор по именам поддерживаемых
CertPathкодирований (в виде строк) - С тех пор как:
- 1.4
generateCertPath
public final CertPath generateCertPath(InputStream inStream) throws CertificateException
CertPath и инициализирует его данными, прочитанными из потока inStream. Данные предполагаются в кодировке по умолчанию. Имя кодировки по умолчанию является первым элементом Iterator возвращаемого методом getCertPathEncodings.- Параметры:
-
inStream- поток ввода, содержащий данные - Возвращает:
- объект
CertPathинициализированный данными из потокаInputStream - Исключения:
-
CertificateException- если произошла ошибка при декодировании - С тех пор как:
- 1.4
generateCertPath
public final CertPath generateCertPath(InputStream inStream, String encoding) throws CertificateException
CertPath и инициализирует его данными, прочитанными из потока inStream. Данные предполагаются в указанной кодировке. Справочная информация о стандартных именах кодирования и их форматах содержится в разделе CertPath Encodings спецификации Java Security Standard Algorithm Names Specification.- Параметры:
-
inStream- поток ввода, содержащий данные -
encoding- кодировка, используемая для данных - Возвращает:
- объект
CertPathинициализированный данными из потокаInputStream - Исключения:
-
CertificateException- если произошла ошибка при декодировании или запрошенная кодировка не поддерживается - С тех пор как:
- 1.4
generateCertPath
public final CertPath generateCertPath(List<? extends Certificate> certificates) throws CertificateException
CertPath и инициализирует его списком List Certificate. Указанные сертификаты должны быть поддерживаемого типа для CertificateFactory. Они будут скопированы из предоставленного объекта List.
- Parameters:
-
certificates- списокListCertificate - Returns:
- объект
CertPath, инициализированный предоставленным списком сертификатов - Throws:
-
CertificateException- если произошла ошибка - Since:
- 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
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
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- поток ввода с CRL. - Returns:
- представление коллекции (возможно пустое) объектов java.security.cert.CRL, инициализированных данными из потока ввода.
- Throws:
-
CRLException- при ошибках разбора.
© 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/java/security/cert/CertificateFactory.html