Класс X509Certificate
- Все реализуемые интерфейсы:
-
Serializable,X509Extension
public abstract class X509Certificate extends Certificate implements X509Extension
Абстрактный класс для сертификатов X.509. Он предоставляет стандартный способ доступа ко всем атрибутам сертификата X.509.
В июне 1996 года базовый формат X.509 v3 был завершен ISO/IEC и ANSI X9, который описан ниже в ASN.1:
Certificate ::= SEQUENCE {
tbsCertificate TBSCertificate,
signatureAlgorithm AlgorithmIdentifier,
signature BIT STRING }
Эти сертификаты широко используются для поддержки аутентификации и других функций в системах безопасности интернета. Общие приложения включают Privacy Enhanced Mail (PEM), Transport Layer Security (SSL), подпись кода для надежной дистрибуции программного обеспечения и Secure Electronic Transactions (SET).
Эти сертификаты управляются и гарантируются уполномоченными центрами сертификации (УЦС). УЦС — это сервисы, которые создают сертификаты, помещая данные в стандартный формат X.509, а затем цифрово подписывают эти данные. УЦС выступают в качестве доверенных третьих лиц, устанавливая связи между сторонами, которые не имеют непосредственного знания друг о друге. Сертификаты УЦС могут быть подписаны самими собой или другим УЦС, например, «корневым» УЦС.
Более подробную информацию можно найти в RFC 5280: Профиль сертификатов и списков отозванных сертификатов (CRL) открытого ключа инфраструктуры X.509 интернета.
Определение ASN.1 для tbsCertificate выглядит следующим образом:
TBSCertificate ::= SEQUENCE {
version [0] EXPLICIT Version DEFAULT v1,
serialNumber CertificateSerialNumber,
signature AlgorithmIdentifier,
issuer Name,
validity Validity,
subject Name,
subjectPublicKeyInfo SubjectPublicKeyInfo,
issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL,
-- If present, version must be v2 or v3
subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL,
-- If present, version must be v2 or v3
extensions [3] EXPLICIT Extensions OPTIONAL
-- If present, version must be v3
}
Сертификаты создаются с использованием фабрики сертификатов. Пример создания сертификата X.509:
try (InputStream inStream = new FileInputStream("fileName-of-cert")) {
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate)cf.generateCertificate(inStream);
}
- С:
- 1.2
- См. также:
Краткое описание вложенных классов
Вложенные классы/интерфейсы, объявленные в классе java.security.cert.Certificate
Certificate.CertificateRep
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Конструктор для сертификатов X.509. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
abstract void |
checkValidity() |
Проверяет, является ли сертификат в настоящее время действительным. |
abstract void |
checkValidity |
Проверяет, находится ли заданная дата в пределах срока действия сертификата. |
abstract int |
getBasicConstraints() |
Получает длину пути ограничений сертификата из критического BasicConstraints расширения (OID = 2.5.29.19). |
List |
getExtendedKeyUsage() |
Получает неуправляемый список строк, представляющих OBJECT IDENTIFIERs поля ExtKeyUsageSyntax расширения расширенного использования ключа (OID = 2.5.29.37). |
Collection |
getIssuerAlternativeNames() |
Получает неизменяемый набор альтернативных имен эмитента из IssuerAltName расширения (OID = 2.5.29.18). |
abstract Principal |
getIssuerDN() |
Устаревшее. |
abstract boolean[] |
getIssuerUniqueID() |
Получает значение issuerUniqueID из сертификата. |
X500Principal |
getIssuerX500Principal() |
Возвращает значение эмитента (различительный имя эмитента) из сертификата в виде X500Principal. |
abstract boolean[] |
getKeyUsage() |
Получает булевый массив, представляющий биты KeyUsage расширения (OID = 2.5.29.15). |
abstract Date |
getNotAfter() |
Получает значение даты notAfter из периода действия сертификата. |
abstract Date |
getNotBefore() |
Получает значение даты notBefore из периода действия сертификата. |
abstract BigInteger |
getSerialNumber() |
Получает значение serialNumber из сертификата. |
abstract String |
getSigAlgName() |
Получает имя алгоритма подписи для алгоритма подписи сертификата. |
abstract String |
getSigAlgOID() |
Получает строку OID алгоритма подписи из сертификата. |
abstract byte[] |
getSigAlgParams() |
Получает DER-закодированные параметры алгоритма подписи из алгоритма подписи этого сертификата. |
abstract byte[] |
getSignature() |
Получает значение signature (сырые биты подписи) из сертификата. |
Collection |
getSubjectAlternativeNames() |
Получает неизменяемый набор альтернативных имен субъекта из SubjectAltName расширения (OID = 2.5.29.17). |
abstract Principal |
getSubjectDN() |
Устаревшее. Используйте getSubjectX500Principal() вместо этого. |
abstract boolean[] |
getSubjectUniqueID() |
Получает значение subjectUniqueID из сертификата. |
X500Principal |
getSubjectX500Principal() |
Возвращает значение субъекта (различительное имя субъекта) из сертификата в виде X500Principal. |
abstract byte[] |
getTBSCertificate() |
Получает DER-закодированную информацию о сертификате, tbsCertificate из этого сертификата. |
abstract int |
getVersion() |
Получает значение version (номер версии) из сертификата. |
void |
verify |
Проверяет, был ли этот сертификат подписан с использованием закрытого ключа, соответствующего указанному открытому ключу. |
Методы, объявленные в классе java.security.cert.Certificate
equals, getEncoded, getPublicKey, getType, hashCode, toString, verify, verify, writeReplace
Методы, объявленные в классе java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Методы, объявленные в интерфейсе java.security.cert.X509Extension
getCriticalExtensionOIDs, getExtensionValue, getNonCriticalExtensionOIDs, hasUnsupportedCriticalExtension
Подробное описание конструкторов
X509Certificate
protected X509Certificate()
Подробное описание методов
checkValidity
public abstract void checkValidity() throws CertificateExpiredException, CertificateNotYetValidException
Срок действия состоит из двух значений даты/времени: начальной и конечной дат (и времени), в течение которых сертификат действителен. Он определен в ASN.1 как:
validity Validity
Validity ::= SEQUENCE {
notBefore CertificateValidityDate,
notAfter CertificateValidityDate }
CertificateValidityDate ::= CHOICE {
utcTime UTCTime,
generalTime GeneralizedTime }
- Исключения:
-
CertificateExpiredException- если сертификат просрочен. -
CertificateNotYetValidException- если сертификат еще не действителен.
checkValidity
public abstract void checkValidity(Date date) throws CertificateExpiredException, CertificateNotYetValidException
- Параметры:
-
date- дата для проверки, действителен ли этот сертификат в эту дату/время. - Исключения:
-
CertificateExpiredException- если сертификат просрочен относительно предоставленнойdate. -
CertificateNotYetValidException- если сертификат еще не действителен относительно предоставленнойdate. - См. также:
getVersion
public abstract int getVersion()
version (номер версии) из сертификата. Определение ASN.1 для этого:
version [0] EXPLICIT Version DEFAULT v1
Version ::= INTEGER { v1(0), v2(1), v3(2) }
- Возвращает:
- номер версии, т.е. 1, 2 или 3.
getSerialNumber
public abstract BigInteger getSerialNumber()
serialNumber из сертификата. Номер сертификата — целое число, присваиваемое центром сертификации каждому сертификату. Он должен быть уникальным для каждого сертификата, выпущенного данным ЦС (т.е. имя издателя и номер сертификата идентифицируют уникальный сертификат). Определение ASN.1 для этого: serialNumber CertificateSerialNumber CertificateSerialNumber ::= INTEGER
- Возвращает:
- номер сертификата.
getIssuerDN
@Deprecated(since="16") public abstract Principal getIssuerDN()
getIssuerX500Principal() вместо этого. Этот метод возвращает issuer как объект Principal, специфичный для реализации, на который не следует полагаться переносимому коду.issuer (имя субъекта-издателя) из сертификата. Имя издателя идентифицирует сущность, подписавшую (и выпустившую) сертификат. Поле имени издателя содержит имя X.500 (DN). Определение ASN.1 для этого:
issuer Name
Name ::= CHOICE { RDNSequence }
RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
RelativeDistinguishedName ::=
SET OF AttributeValueAssertion
AttributeValueAssertion ::= SEQUENCE {
AttributeType,
AttributeValue }
AttributeType ::= OBJECT IDENTIFIER
AttributeValue ::= ANY
Name описывает иерархическое имя, составленное из атрибутов, таких как имя страны, и соответствующих значений, таких как US. Тип компоненты AttributeValue определяется AttributeType; как правило, это directoryString. directoryString обычно является одним из PrintableString, TeletexString или UniversalString.- Возвращает:
- объект Principal, имя которого является именем субъекта-издателя.
getIssuerX500Principal
public X500Principal getIssuerX500Principal()
X500Principal. Рекомендуется, чтобы подклассы переопределяли этот метод.
- Возвращает:
- объект
X500Principal, представляющий имя субъекта-издателя - С тех пор:
- 1.4
getSubjectDN
@Deprecated(since="16") public abstract Principal getSubjectDN()
getSubjectX500Principal() вместо этого. Этот метод возвращает subject как объект Principal, специфичный для реализации, на который не следует полагаться переносимому коду.subject (имя субъекта) из сертификата. Если значение subject пустое, то метод getName() возвращаемого объекта Principal возвращает пустую строку (""). Определение ASN.1 для этого:
subject Name
См. getIssuerDN для Name и других соответствующих определений.
- Возвращает:
- объект Principal, имя которого является именем субъекта.
getSubjectX500Principal
public X500Principal getSubjectX500Principal()
X500Principal. Если значение субъекта пустое, то метод getName() возвращаемого объекта X500Principal возвращает пустую строку (""). Рекомендуется, чтобы подклассы переопределяли этот метод.
- Возвращает:
- объект
X500Principal, представляющий имя субъекта - С тех пор:
- 1.4
getNotBefore
public abstract Date getNotBefore()
notBefore дату из периода действия сертификата. Соответствующие определения ASN.1:
validity Validity
Validity ::= SEQUENCE {
notBefore CertificateValidityDate,
notAfter CertificateValidityDate }
CertificateValidityDate ::= CHOICE {
utcTime UTCTime,
generalTime GeneralizedTime }
- Возвращает:
- начальная дата периода действия.
- См. также:
getNotAfter
public abstract Date getNotAfter()
notAfter дату из периода действия сертификата. См. getNotBefore для соответствующих определений ASN.1.- Возвращает:
- конечная дата периода действия.
- См. также:
getTBSCertificate
public abstract byte[] getTBSCertificate() throws CertificateEncodingException
tbsCertificate из этого сертификата. Это можно использовать для независимой проверки подписи.- Возвращает:
- информация о сертификате, закодированная в DER.
- Исключения:
-
CertificateEncodingException- если произошла ошибка кодирования.
getSignature
public abstract byte[] getSignature()
signature (сырые биты подписи) из сертификата. Определение ASN.1 для этого: signature BIT STRING
- Возвращает:
- подпись.
getSigAlgName
public abstract String getSigAlgName()
signatureAlgorithm AlgorithmIdentifier
AlgorithmIdentifier ::= SEQUENCE {
algorithm OBJECT IDENTIFIER,
parameters ANY DEFINED BY algorithm OPTIONAL }
-- contains a value of the type
-- registered for use with the
-- algorithm object identifier value
Имя алгоритма определяется по строке OID algorithm.
- Возвращает:
- имя алгоритма подписи.
getSigAlgOID
public abstract String getSigAlgOID()
См. getSigAlgName для соответствующих определений ASN.1.
- Возвращает:
- строку OID алгоритма подписи.
getSigAlgParams
public abstract byte[] getSigAlgParams()
AlgorithmParameters и инициализируйте его именем, возвращаемым getSigAlgName. См. getSigAlgName для соответствующих определений ASN.1.
- Возвращает:
- параметры алгоритма подписи в формате DER или null, если параметры отсутствуют.
getIssuerUniqueID
public abstract boolean[] getIssuerUniqueID()
issuerUniqueID из сертификата. Уникальный идентификатор издателя присутствует в сертификате для обработки возможности повторного использования имен издателей со временем. RFC 5280 рекомендует не повторно использовать имена и не использовать уникальные идентификаторы в соответствующих сертификатах. Приложения, соответствующие этому профилю, должны уметь анализировать уникальные идентификаторы и проводить сравнения. Определение ASN.1 для этого:
issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL UniqueIdentifier ::= BIT STRING
- Возвращает:
- уникальный идентификатор издателя или null, если он не присутствует в сертификате.
getSubjectUniqueID
public abstract boolean[] getSubjectUniqueID()
subjectUniqueID из сертификата. Определение ASN.1 для этого:
subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL UniqueIdentifier ::= BIT STRING
- Возвращает:
- уникальный идентификатор субъекта или null, если он не присутствует в сертификате.
getKeyUsage
public abstract boolean[] getKeyUsage()
KeyUsage, (OID = 2.5.29.15). Расширение ключевого использования определяет назначение (например, шифрование, подпись, подпись сертификата) ключа, содержащегося в сертификате. Определение ASN.1 для этого:
KeyUsage ::= BIT STRING {
digitalSignature (0),
nonRepudiation (1),
keyEncipherment (2),
dataEncipherment (3),
keyAgreement (4),
keyCertSign (5),
cRLSign (6),
encipherOnly (7),
decipherOnly (8) }
RFC 5280 рекомендует, при использовании, отмечать это как критическое расширение.- Возвращает:
- расширение KeyUsage этого сертификата, представленное массивом булевых значений. Порядок значений KeyUsage в массиве такой же, как и в определении ASN.1 выше. Массив будет содержать значение для каждого из определённых выше значений KeyUsage. Если список KeyUsage, закодированный в сертификате, длиннее вышеперечисленного списка, он не будет усечён. Возвращает null, если этот сертификат не содержит расширения KeyUsage.
getExtendedKeyUsage
public List<String> getExtendedKeyUsage() throws CertificateParsingException
ExtKeyUsageSyntax расширения расширенного ключевого использования, (OID = 2.5.29.37). Оно указывает одно или несколько назначений, для которых сертифицированный открытый ключ может использоваться, помимо или вместо основных назначений, указанных в поле расширения ключевого использования. Определение ASN.1 для этого: ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId KeyPurposeId ::= OBJECT IDENTIFIERЦели использования ключей могут быть определены любой организацией, нуждающейся в этом. Идентификаторы объектов, используемые для идентификации целей ключа, должны быть назначены в соответствии с IANA или ITU-T Rec. X.660 | ISO/IEC/ITU 9834-1.
Этот метод был добавлен в версию 1.4 Java 2 Platform Standard Edition. Для поддержания обратной совместимости с существующими поставщиками услуг, этот метод не abstract и он предоставляет реализацию по умолчанию. Подклассы должны переопределить этот метод с правильной реализацией.
- Возвращает:
- расширение ExtendedKeyUsage этого сертификата, как неизменяемый список идентификаторов объектов, представленных в виде строк. Возвращает null, если этот сертификат не содержит расширения ExtendedKeyUsage.
- Выбрасывает:
-
CertificateParsingException- если расширение не может быть декодировано - С:
- 1.4
getBasicConstraints
public abstract int getBasicConstraints()
BasicConstraints расширения, (OID = 2.5.29.19). Расширение базовых ограничений определяет, является ли субъект сертификата центром сертификации (ЦС) и насколько глубоким может быть путь сертификации через этот ЦС. Поле pathLenConstraint (см. ниже) имеет смысл только если cA установлено в TRUE. В этом случае оно даёт максимальное количество сертификатов ЦС, которые могут следовать за этим сертификатом в пути сертификации. Значение ноль указывает, что за ним в пути может следовать только сертификат конечного пользователя.
Определение ASN.1 для этого:
BasicConstraints ::= SEQUENCE {
cA BOOLEAN DEFAULT FALSE,
pathLenConstraint INTEGER (0..MAX) OPTIONAL }
- Возвращает:
- значение
pathLenConstraintесли расширение BasicConstraints присутствует в сертификате, и субъект сертификата является ЦС, в противном случае -1. Если субъект сертификата является ЦС иpathLenConstraintотсутствует, возвращаетсяInteger.MAX_VALUE, чтобы указать, что нет ограничений на допустимую длину пути сертификации.
getSubjectAlternativeNames
public Collection<List<?>> getSubjectAlternativeNames() throws CertificateParsingException
SubjectAltName расширения, (OID = 2.5.29.17). Определение ASN.1 расширения SubjectAltName :
SubjectAltName ::= GeneralNames
GeneralNames :: = SEQUENCE SIZE (1..MAX) OF GeneralName
GeneralName ::= CHOICE {
otherName [0] OtherName,
rfc822Name [1] IA5String,
dNSName [2] IA5String,
x400Address [3] ORAddress,
directoryName [4] Name,
ediPartyName [5] EDIPartyName,
uniformResourceIdentifier [6] IA5String,
iPAddress [7] OCTET STRING,
registeredID [8] OBJECT IDENTIFIER}
OtherName ::= SEQUENCE {
type-id OBJECT IDENTIFIER,
value [0] EXPLICIT ANY DEFINED BY type-id }
Если этот сертификат не содержит расширения SubjectAltName, возвращается null. В противном случае возвращается Collection, содержащий запись для каждого GeneralName в расширении. Каждая запись представляет собой List, где первая запись — это Integer (тип имени, 0-8), а вторая — String или массив байтов (имя в строковом или ASN.1 DER-закодированном формате соответственно). Может быть больше записей в зависимости от типа имени.
Имена RFC 822, DNS и URI возвращаются как String , используя устоявшиеся строковые форматы для этих типов (в соответствии с ограничениями, указанными в RFC 5280). Имена адресов IPv4 возвращаются в формате точка-тире. Имена адресов IPv6 возвращаются в формате "a1:a2:...:a8", где a1-a8 — шестнадцатеричные значения, представляющие восемь 16-битных частей адреса. Имена OID возвращаются как String , представленные как серия неотрицательных целых чисел, разделённых точками. Имена каталога (различительные имена) возвращаются в строковом формате RFC 2253. Для имён X.400 или имён сторон EDI не определён стандартный строковый формат. Они возвращаются как массивы байтов, содержащие ASN.1 DER-закодированную форму имени. Другие имена также возвращаются как массивы байтов, содержащие ASN.1 DER-закодированную форму имени. В списке также может быть третья запись, содержащая type-id имени otherName в строковом формате, и четвёртая запись, содержащая его value в виде строки (если значение является допустимой поддерживаемой строкой символов) или массива байтов, содержащего ASN.1 DER-закодированную форму значения без контекстно-специфического составного тега с номером 0.
Обратите внимание, что возвращённая Collection может содержать более одного имени одного типа. Также обратите внимание, что возвращаемая Collection неизменяема, и любые записи, содержащие массивы байтов, дублируются, чтобы предотвратить последующие изменения.
Этот метод был добавлен в версию 1.4 Java 2 Platform Standard Edition. Для поддержания обратной совместимости с существующими поставщиками услуг, этот метод не abstract и он предоставляет реализацию по умолчанию. Подклассы должны переопределить этот метод с правильной реализацией.
- Примечание реализации:
- Поставщик JDK SUN поддерживает третью и четвёртую записи otherName.
- Возвращает:
- неизменяемую
Collectionальтернативных имён субъекта (илиnull) - Выбрасывает:
-
CertificateParsingException- если расширение не может быть декодировано - С:
- 1.4
getIssuerAlternativeNames
public Collection<List<?>> getIssuerAlternativeNames() throws CertificateParsingException
IssuerAltName расширения, (OID = 2.5.29.18). Определение ASN.1 расширения IssuerAltName :
IssuerAltName ::= GeneralNamesОпределение ASN.1 для
GeneralNames определено в getSubjectAlternativeNames. Если этот сертификат не содержит расширения IssuerAltName, возвращается null. В противном случае возвращается Collection, содержащий запись для каждого GeneralName в расширении. Каждая запись представляет собой List, где первая запись — это Integer (тип имени, 0-8), а вторая — String или массив байтов (имя в строковом или ASN.1 DER-закодированном формате соответственно). Может быть больше записей в зависимости от типа имени. Более подробную информацию о форматах, используемых для каждого типа имени, см. в методе getSubjectAlternativeNames.
Обратите внимание, что возвращаемая Collection может содержать более одного имени одного типа. Также обратите внимание, что возвращаемая Collection неизменяема, и любые записи, содержащие массивы байтов, дублируются, чтобы предотвратить последующие изменения.
Этот метод был добавлен в версию 1.4 Java 2 Platform Standard Edition. Для поддержания обратной совместимости с существующими поставщиками услуг, этот метод не abstract и он предоставляет реализацию по умолчанию. Подклассы должны переопределить этот метод с правильной реализацией.
- Возвращает:
- неизменяемую
Collectionальтернативных имён эмитента (илиnull) - Выбрасывает:
-
CertificateParsingException- если расширение не может быть декодировано - С:
- 1.4
verify
public void verify(PublicKey key, Provider sigProvider) throws CertificateException, NoSuchAlgorithmException, InvalidKeyException, SignatureException
abstract и он предоставляет реализацию по умолчанию.- Переопределяет:
-
verifyв классеCertificate - Параметры:
-
key- PublicKey, используемый для выполнения проверки. -
sigProvider- поставщик подписи. - Выбрасывает:
-
NoSuchAlgorithmException- при недопустимых алгоритмах подписи. -
InvalidKeyException- при неверном ключе. -
SignatureException- при ошибках подписи. -
CertificateException- при ошибках кодирования. -
UnsupportedOperationException- если метод не поддерживается - С:
- 1.8
© 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/X509Certificate.html
getIssuerX500Principal()вместо этого.