Класс 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, из поля 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 как объект, специфичный для реализации, на котором не следует полагаться переносному коду.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 описывает иерархическое имя, состоящее из атрибутов, таких как страна, и соответствующих значений, таких как США. Тип компонента 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 как объект, специфичный для реализации, на котором не следует полагаться переносному коду.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
Имя алгоритма определяется из строки algorithm OID.
- Возвращает:
- имя алгоритма подписи.
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). Расширение key usage определяет назначение (например, шифрование, подпись, подписание сертификатов) ключа, содержащегося в сертификате. Следующее определение 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 расширения extended key usage (OID = 2.5.29.37). Оно указывает одно или несколько назначений, для которых сертифицированный открытый ключ может быть использован, помимо или вместо основных назначений, указанных в поле key usage. Следующее определение 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). Расширение basic constraints определяет, является ли субъект сертификата центром сертификации (CA) и насколько глубоким может быть путь сертификации через этот 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-закодированный формат имени. otherNames также возвращаются как массивы байтов, содержащие 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 и предоставляет реализацию по умолчанию.- Overrides:
-
verifyв классеCertificate - Parameters:
-
key- открытый ключ, используемый для проведения проверки. -
sigProvider- поставщик подписи. - Throws:
-
NoSuchAlgorithmException- при недопустимых алгоритмах подписи. -
InvalidKeyException- при некорректном ключе. -
SignatureException- при ошибках подписи. -
CertificateException- при ошибках кодирования. -
UnsupportedOperationException- если метод не поддерживается - Since:
- 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/security/cert/X509Certificate.html
getIssuerX500Principal()вместо этого.