Класс CertificateFactory
- java.lang.Object
-
- java.security.cert.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
- См. также:
-
Certificate,X509Certificate,CertPath,CRL,X509CRL
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected | CertificateFactory(CertificateFactorySpi certFacSpi,
Provider provider,
String type) | Создаёт объект CertificateFactory заданного типа и инкапсулирует указанную реализацию провайдера (объект SPI) в нём. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
Certificate | generateCertificate(InputStream inStream) | Генерирует объект сертификата и инициализирует его данными, считанными из входного потока |
Collection<? extends Certificate> | generateCertificates(InputStream inStream) | Возвращает (возможно, пустую) коллекцию представлений сертификатов, считанных из указанного входного потока |
CertPath | generateCertPath(InputStream inStream) | Генерирует объект |
CertPath | generateCertPath(InputStream inStream,
String encoding) | Генерирует объект |
CertPath | generateCertPath(List<? extends Certificate> certificates) | Генерирует объект |
CRL | generateCRL(InputStream inStream) | Генерирует объект списка отзыва сертификатов (CRL) и инициализирует его данными, считанными из входного потока |
Collection<? extends CRL> | generateCRLs(InputStream inStream) | Возвращает (возможно, пустую) коллекцию представлений CRL, считанных из указанного входного потока |
Iterator<String> | getCertPathEncodings() | Возвращает итератор по |
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.preferredSecurity, чтобы определить предпочтительный порядок провайдеров для указанного алгоритма. Это может отличаться от порядка провайдеров, возвращаемых методом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