Java create x509 certificate

Криптография в Java. Класс Certificate

Привет, Хабр! Представляю вашему вниманию перевод заключительной статьи «Java Certificate» автора Jakob Jenkov из серии статей для начинающих, желающих освоить основы криптографии в Java.

Оглавление:

Java Certificate (Сертификат)

Класс сертификата (java.security.cert.Certificate) представляет собой сертификат удостоверяющий принадлежность некоторому субъекту, например, пользователю. Экземпляр класса сертификата содержит имя и другие сведения об объекте, который он идентифицирует, а также, возможно, цифровую подпись от центра сертификации (ЦС). Класс Certificate является абстрактным классом, поэтому, вы можете использовать в качестве типа переменной Certificate , а ваша переменная всегда будет указывать на подкласс. Этот класс имеет один подкласс — X509Certificate , который представляет сертификат X.509, использующийся в качестве сертификата в протоколах HTTPS и TLS.

Получение экземпляра сертификата

Вы можете получить экземпляр сертификата следующими способами:

Посмотрите эти два руководства для получения дополнительной информации о получении экземпляра сертификата.

getEncoded()

Метод getEncoded() сертификата возвращает закодированную версию сертификата в виде байтового массива. Например, если сертификат является сертификатом X509, возвращенный байтовый массив будет содержать версию экземпляра сертификата в кодировке X.590 (ASN.1 DER). Вот пример использования метода getEncoded() :

byte[] encodedCertificate = certificate.getEncoded();

getPublicKey()

Метод сертификата getPublicKey() возвращает открытый ключ этого экземпляра сертификата. Вот пример метода getPublicKey() :

PublicKey certificatePublicKey = certificate.getPublicKey();

getType()

Метод getType() возвращает тип экземпляра сертификата. Пример getType() :

String certificateType = certificate.getType();

verify()

Класс сертификата содержит три метода verify() . Эти методы могут использоваться для проверки того, что сертификат действительно подписан с закрытым ключом, соответствующим ожидаемому открытому ключу. Вот пример проверки сертификата:

// получение ожидаемого открытого ключа (не из сертификата!) PublicKey expectedPublicKey = . ; try < certificate.verify(expectedPublicKey); >catch (InvalidKeyException e) < // сертификат не был подписан данным открытым ключом >catch (NoSuchAlgorithmException | NoSuchProviderException | SignatureException | CertificateException e)< // что-то еще пошло не так >

Метод verify() не возвращает значения. Если проверка не пройдена, будет выдано исключение InvalidKeyException . Если не сгенерировано исключение, экземпляр сертификата можно считать проверенным.

Java CertificateFactory (Фабрика сертификатов

Класс CertificateFactory (java.security.cert.CertificateFactory) способен создавать экземпляры сертификата ( Certificate ) из двоичных данных сертификатов с кодировками X.509 (ASN.1 DER). CertificateFactory также может создавать экземпляры CertPath . CertPath — это цепочка сертификатов, где каждый сертификат подписан следующим сертификатом в данной цепочке.

Создание экземпляра CertificateFactory

Прежде чем вы сможете создавать экземпляры Certificate , вы должны создать экземпляр CertificateFactory . Пример:

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

В этом примере создается экземпляр CertificateFactory , способный создавать экземпляры сертификата X.509 ( X509Certificate — подкласс Certificate ).

Создание экземпляра Certificate

Создав экземпляр CertificateFactory , вы можете начать создавать экземпляры Certificate . Это делается с помощью вызова метода generateCertificate() . Пример вызова метода generateCertificate() :

InputStream certificateInputStream = new FileInputStream("my-x509-certificate.crt"); Certificate certificate = certificateFactory.generateCertificate(certificateInputStream);

Создание экземпляра CertPath

CertificateFactory также может создавать экземпляр CertPath . Экземпляр CertPath создается вызовом метода generateCertPath() :

InputStream certificateInputStream = new FileInputStream("my-x509-certificate-chain.crt"); CertPath certPath = certificateFactory.generateCertPath(certificateInputStream);

Java CertPath (Цепочка сертификатов)

Класс CertPath (java.security.cert.CertPath) представляет цепочку сертификатов (объекты Certificate ), где каждый сертификат является цифровым подписывающим лицом следующего сертификата в цепочке. Класс CertPath обычно используется для проверки сертификата личности вместе с сертификатами центров сертификации (ЦС), которые подписали сертификат.

Получение экземпляра CertPath

Обычно экземпляр CertPath получают из фабрики сертификатов ( CertificateFactory или CertPathBuilder ).

getCertificates()

Получив экземпляр CertPath , вы можете получить экземпляры Certificate , из которых состоит CertPath , вызвав метод getCertificates() . Вот пример получения сертификатов из экземпляра CertPath :

List certificates = certPath.getCertificates();

getType()

Метод getType() возвращает строку, указывающую, какой тип сертификатов (например, X.509) содержится в этом экземпляре CertPath . Вот пример получения типа CertPath через методом getType() :

String type = certPath.getType();

Источник

Читайте также:  Php функция http build query
Оцените статью