Класс X509Certificate
- Все реализуемые интерфейсы:
Serializable, X509Extension, DEREncodablePREVIEW
public abstract non-sealed class X509Certificate extends Certificate implements X509Extension, DEREncodablePREVIEW
Абстрактный класс для сертификатов X.509. Он предоставляет стандартный способ доступа ко всем атрибутам сертификата X.509.
В июне 1996 года ISO/IEC и ANSI X9 завершили работу над базовым форматом X.509 v3, описанным ниже в ASN.1:
Certificate ::= SEQUENCE {
tbsCertificate TBSCertificate,
signatureAlgorithm AlgorithmIdentifier,
signature BIT STRING }
Эти сертификаты широко используются для поддержки аутентификации и других функций в системах интернет-безопасности. Среди распространённых приложений — Privacy Enhanced Mail (PEM), Transport Layer Security (SSL), подписание кода для распространения доверенного программного обеспечения и Secure Electronic Transactions (SET).
Эти сертификаты управляются и подтверждаются центрами сертификации (CA). CA — это службы, которые создают сертификаты, помещая данные в стандартный формат X.509, а затем подписывая эти данные цифровой подписью. CA выступают в роли доверенных третьих сторон, помогая установить связь между субъектами, которые не знакомы друг с другом напрямую. Сертификаты CA подписываются либо самими CA, либо другим CA, например «корневым» CA.
Дополнительную информацию см. в RFC 5280: профиль сертификатов и списков отзыва сертификатов (CRL) инфраструктуры открытых ключей Internet 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
- Внешние спецификации
- См. также:
Краткое описание вложенных классов
Вложенные классы/интерфейсы, объявленные в классе Certificate
Certificate.CertificateRep
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Конструктор для сертификатов X.509. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
abstract void |
checkValidity() |
Проверяет, действителен ли сертификат в данный момент. |
abstract void |
checkValidity |
Проверяет, входит ли указанная дата в период действия сертификата. |
abstract int |
getBasicConstraints() |
Возвращает длину пути ограничений сертификата из критического расширения BasicConstraints (OID = 2.5.29.19). |
List |
getExtendedKeyUsage() |
Возвращает неизменяемый список строк, представляющих OBJECT IDENTIFIER поля 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 |
Проверяет, подписан ли этот сертификат закрытым ключом, соответствующим указанному открытому ключу. |
Методы, объявленные в классе Certificate
equals, getEncoded, getPublicKey, getType, hashCode, toString, verify, verify, writeReplace
Методы, объявленные в интерфейсе 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 из периода действия сертификата. Соответствующие определения ASN.1 см. в разделе getNotBefore.- Возвращает:
- дату окончания периода действия.
- См. также:
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()
Соответствующие определения ASN.1 см. в разделе getSigAlgName.
- Возвращает:
- строку OID алгоритма подписи.
- Внешние спецификации
getSigAlgParams
public abstract byte[] getSigAlgParams()
AlgorithmParameters и создайте экземпляр, указав имя, возвращаемое методом getSigAlgName. Соответствующие определения ASN.1 см. в разделе getSigAlgName.
- Возвращает:
- закодированные в 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). Расширение базовых ограничений указывает, является ли субъект сертификата центром сертификации (CA) и насколько длинным может быть путь сертификации через этот центр. Поле pathLenConstraint (см. ниже) имеет смысл только в том случае, если cA имеет значение TRUE. В этом случае оно задаёт максимальное число сертификатов CA, которые могут следовать за этим сертификатом в пути сертификации. Значение 0 указывает, что следующим в пути может быть только сертификат конечного пользователя.
Определение ASN.1 для него:
BasicConstraints ::= SEQUENCE {
cA BOOLEAN DEFAULT FALSE,
pathLenConstraint INTEGER (0..MAX) OPTIONAL }
- Возвращает:
- значение
pathLenConstraint, если расширение BasicConstraints присутствует в сертификате и субъект сертификата является CA; в противном случае — -1. Если субъект сертификата является CA и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. Имена otherName также возвращаются в виде массивов байтов, содержащих имя в кодировке 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— открытый ключ, используемый для проверки. -
sigProvider— поставщик алгоритма подписи. - Вызывает исключение:
-
NoSuchAlgorithmException— если алгоритмы подписи не поддерживаются. -
InvalidKeyException— если ключ некорректен. -
SignatureException— при ошибках подписи. -
CertificateException— при ошибках кодирования. -
UnsupportedOperationException— если метод не поддерживается - Начиная с версии:
- 1.8
© 1993, 2025, 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/25/docs/api/java.base/java/security/cert/X509Certificate.html
getIssuerX500Principal().