Класс 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
- Since:
- 1.2
- See Also:
-
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,
Provider provider) Возвращает объект фабрики сертификатов для указанного типа сертификата. |
static CertificateFactory |
getInstance(String type,
String 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().
- Параметры:
-
type- имя запрошенного типа сертификата. Сведения о стандартных типах сертификатов см. в разделе CertificateFactory документации Java Cryptography Architecture по стандартным именам алгоритмов . - Возвращает:
- объект фабрики сертификатов для указанного типа.
- Исключения:
-
CertificateException- если ни один поставщик не поддерживает реализацию CertificateFactorySpi для указанного типа. - См. также:
Provider
getInstance
public static final CertificateFactory getInstance(String type,
String provider)
throws CertificateException,
NoSuchProviderException Возвращает объект фабрики сертификатов для указанного типа сертификата.
Возвращается новый объект CertificateFactory, инкапсулирующий реализацию CertificateFactorySpi из указанного поставщика. Указанный поставщик должен быть зарегистрирован в списке поставщиков безопасности.
Обратите внимание, что список зарегистрированных поставщиков можно получить с помощью метода Security.getProviders().
- Параметры:
-
type- тип сертификата. Сведения о стандартных типах сертификатов см. в разделе CertificateFactory документации Java Cryptography Architecture по стандартным именам алгоритмов . -
provider- имя поставщика. - Возвращает:
- объект фабрики сертификатов для указанного типа.
- Исключения:
-
CertificateException- если реализация CertificateFactorySpi для указанного алгоритма недоступна у указанного поставщика. -
NoSuchProviderException- если указанный поставщик не зарегистрирован в списке поставщиков безопасности. -
IllegalArgumentException- если имя поставщика равно null или пустое. - См. также:
Provider
getInstance
public static final CertificateFactory getInstance(String type,
Provider provider)
throws CertificateException Возвращает объект фабрики сертификатов для указанного типа сертификата.
Возвращается новый объект CertificateFactory, инкапсулирующий реализацию CertificateFactorySpi из указанного объекта Provider. Обратите внимание, что указанный объект Provider не обязательно должен быть зарегистрирован в списке поставщиков.
- Параметры:
-
type- тип сертификата. Сведения о стандартных типах сертификатов см. в разделе CertificateFactory документации Java Cryptography Architecture по стандартным именам алгоритмов . -
provider- поставщик. - Возвращает:
- объект фабрики сертификатов для указанного типа.
- Исключения:
-
CertificateException- если реализация CertificateFactorySpi для указанного алгоритма недоступна от указанного объекта Provider. -
IllegalArgumentException- еслиproviderравен 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 Cryptography Architecture по стандартным именам алгоритмов .
Попытки изменить возвращённую Iterator через метод remove приводят к исключению UnsupportedOperationException.
- Возвращает:
- итератор по именам поддерживаемых
CertPathкодировок (в качествеString). - С:
- 1.4
generateCertPath
public final CertPath generateCertPath(InputStream inStream)
throws CertificateException Генерирует объект CertPath и инициализирует его данными, считанными из InputStream inStream. Данные предполагаются в кодировке по умолчанию. Имя кодировки по умолчанию является первым элементом Iterator возвращаемого методом getCertPathEncodings.
- Параметры:
-
inStream-InputStreamсодержащий данные - Возвращает:
- объект
CertPathинициализированный данными изInputStream - Исключения:
-
CertificateException- если произошла ошибка при декодировании - С:
- 1.4
generateCertPath
public final CertPath generateCertPath(InputStream inStream,
String encoding)
throws CertificateException Генерирует объект CertPath и инициализирует его данными, считанными из InputStream inStream. Данные предполагаются в указанной кодировке. Сведения о стандартных именах кодировки и их форматах см. в разделе CertPath Encodings документации Java Cryptography Architecture по стандартным именам алгоритмов .
- Параметры:
-
inStream-InputStreamсодержащий данные -
encoding- используемая кодировка данных - Возвращает:
- объект
CertPathинициализированный данными изInputStream - Исключения:
-
CertificateException- если произошла ошибка при декодировании или запрошенная кодировка не поддерживается - С:
- 1.4
generateCertPath
public final CertPath generateCertPath(List<? extends Certificate> certificates)
throws CertificateException Генерирует объект CertPath и инициализирует его списком List объектов Certificate.
Предоставленные сертификаты должны быть типа, поддерживаемого фабрикой CertificateFactory. Они будут скопированы из переданного объекта List.
- Параметры:
-
certificates- списокListобъектовCertificate. - Возвращает:
- объект
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. Например, если эта фабрика сертификатов реализует CRL X.509, возвращаемый объект 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. Например, если эта фабрика сертификатов реализует CRL X.509, элементы в возвращенной коллекции можно привести к классу X509CRL.
В случае фабрики сертификатов для CRL X.509, inStream может содержать последовательность CRL в кодировке DER. Кроме того, inStream может содержать набор CRL PKCS#7. Это объект PKCS#7 SignedData, единственным значимым полем которого является crls. В частности, подпись и содержимое игнорируются. Этот формат позволяет загружать сразу несколько CRL. Если CRL нет, возвращается пустая коллекция.
Обратите внимание, что если заданный входной поток не поддерживает mark и reset, этот метод прочитает весь входной поток.
- Parameters:
-
inStream- входной поток с CRL. - 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.