Класс 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 |
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 |
generateCRLs |
Возвращает (возможно, пустую) коллекцию представлений CRL, прочитанных из указанного входного потока inStream. |
final Iterator |
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 дополнительно использует свойство
jdk.security.provider.preferredSecurity, чтобы определить предпочтительный порядок провайдеров для указанного алгоритма. Этот порядок может отличаться от порядка провайдеров, возвращаемых методомSecurity.getProviders(). - Параметры:
-
type- имя запрошенного типа сертификата. См. раздел CertificateFactory в Спецификации Java Security Standard Algorithm Names для информации о стандартных типах сертификатов. - Возвращает:
- объект фабрики сертификатов для указанного типа
- Исключения:
-
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 для информации о стандартных типах сертификатов. -
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 для информации о стандартных типах сертификатов. -
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 для получения информации о стандартных именах кодировок и их форматах. Попытки изменить возвращаемый Iterator с помощью метода remove приводят к UnsupportedOperationException
- Возвращает:
- итератор по именам поддерживаемых
CertPathкодировок (какString) - С тех пор как:
- 1.4
generateCertPath
public final CertPath generateCertPath(InputStream inStream) throws CertificateException
CertPath и инициализирует его данными, считанными из входного потока inStream. Предполагается, что данные находятся в кодировке по умолчанию. Имя кодировки по умолчанию - первый элемент Iterator, возвращаемого методом getCertPathEncodings.- Параметры:
-
inStream- поток содержащий данные - Возвращает:
- объект
CertPathинициализированный данными из входного потока - Исключения:
-
CertificateException- если возникает исключение во время декодирования - С тех пор как:
- 1.4
generateCertPath
public final CertPath generateCertPath(InputStream inStream, String encoding) throws CertificateException
CertPath и инициализирует его данными, считанными из входного потока inStream. Предполагается, что данные находятся в указанной кодировке. См. раздел CertPath Encodings в Спецификации Java Security Standard Algorithm Names для информации о стандартных именах кодировок и их форматах.- Параметры:
-
inStream- поток содержащий данные -
encoding- кодировка, используемая для данных - Возвращает:
- объект
CertPathинициализированный данными из входного потока - Исключения:
-
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, 2023, 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/21/docs/api/java.base/java/security/cert/CertificateFactory.html