Класс X509Certificate
- java.lang.Object
-
- java.security.cert.Certificate
-
- java.security.cert.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
- См. также:
-
Certificate,CertificateFactory,X509Extension, Сериализованная форма
Вложенные классы
Вложенные классы/интерфейсы, объявленные в классе java.security.cert.Certificate
Certificate.CertificateRep Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected | X509Certificate() | Конструктор для сертификатов X.509. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
abstract void | checkValidity() | Проверяет, является ли сертификат в настоящее время действительным. |
abstract void | checkValidity(Date date) | Проверяет, находится ли заданная дата в период действия сертификата. |
abstract int | getBasicConstraints() | Получает длину пути ограничений сертификата из критического |
List<String> | getExtendedKeyUsage() | Получает неизменяемый список строк, представляющих идентификаторы OBJECT, из |
Collection<List<?>> | getIssuerAlternativeNames() | Получает неизменяемый набор альтернативных имён издателя из |
abstract Principal | getIssuerDN() | Устаревший, заменён на getIssuerX500Principal(). |
abstract boolean[] | getIssuerUniqueID() | Получает значение |
X500Principal | getIssuerX500Principal() | Возвращает значение издателя (имя субъекта) из сертификата в виде |
abstract boolean[] | getKeyUsage() | Получает булевый массив, представляющий биты |
abstract Date | getNotAfter() | Получает дату |
abstract Date | getNotBefore() | Получает дату |
abstract BigInteger | getSerialNumber() | Получает значение |
abstract String | getSigAlgName() | Получает имя алгоритма подписи для алгоритма подписи сертификата. |
abstract String | getSigAlgOID() | Получает строку OID алгоритма подписи из сертификата. |
abstract byte[] | getSigAlgParams() | Получает параметры алгоритма подписи в формате DER из алгоритма подписи этого сертификата. |
abstract byte[] | getSignature() | Получает значение |
Collection<List<?>> | getSubjectAlternativeNames() | Получает неизменяемый набор альтернативных имён субъекта из |
abstract Principal | getSubjectDN() | Устаревший, заменён на getSubjectX500Principal(). |
abstract boolean[] | getSubjectUniqueID() | Получает значение |
X500Principal | getSubjectX500Principal() | Возвращает значение субъекта (разделённое имя субъекта) из сертификата в виде |
abstract byte[] | getTBSCertificate() | Получает DER-кодированную информацию о сертификате, |
abstract int | getVersion() | Получает значение |
void | verify(PublicKey key,
Provider sigProvider) | Проверяет, был ли этот сертификат подписан с использованием закрытого ключа, соответствующего указанному открытому ключу. |
Методы, объявленные в классе 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()
Конструктор для сертификатов X.509.
Методы
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. - См. также:
checkValidity()
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
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 Выделенное имя описывает иерархическое имя, составленное из атрибутов, таких как имя страны, и соответствующих значений, таких как США. Тип компонента AttributeValue определяется AttributeType; в общем случае это будет directoryString. Выделенное имя обычно является одним из PrintableString, TeletexString или UniversalString. - Возвращает:
- объект Principal, имя которого является выделенным именем издателя.
getIssuerX500Principal
public X500Principal getIssuerX500Principal()
Возвращает значение издателя (выделенное имя издателя) из сертификата как X500Principal.
Рекомендуется, чтобы подклассы переопределяли этот метод.
- Возвращает:
- объект
X500Principalпредставляющий выделенное имя издателя - С:
- 1.4
getSubjectDN
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 } - Возвращает:
- начальную дату срока действия.
- См. также:
checkValidity()
getNotAfter
public abstract Date getNotAfter()
Получает notAfter дату из срока действия сертификата. См. getNotBefore для соответствующих определений ASN.1.
- Возвращает:
- конечную дату срока действия.
- См. также:
checkValidity()
getTBSCertificate
public abstract byte[] getTBSCertificate()
throws CertificateEncodingException Получает закодированные в DER данные сертификата, tbsCertificate данного сертификата. Это можно использовать для независимой проверки подписи.
- Возвращает:
- закодированные в DER данные сертификата.
- Исключения:
-
CertificateEncodingException- если произошла ошибка кодирования.
getSignature
public abstract byte[] getSignature()
Получает значение signature (сырые биты подписи) из сертификата. Определение ASN.1 для этого:
signature BIT STRING
- Возвращает:
- подпись.
getSigAlgName
public abstract String getSigAlgName()
Получает имя алгоритма подписи для алгоритма подписи сертификата. Пример — строка "SHA256withRSA". Определение ASN.1 для этого:
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()
Получает строку OID алгоритма подписи из сертификата. OID представлен набором неотрицательных целых чисел, разделенных точками. Например, строка "1.2.840.10040.4.3" определяет алгоритм подписи SHA-1 с DSA, определенный в RFC 3279: Алгоритмы и идентификаторы для инфраструктуры открытых ключей Интернет X.509 сертификатов и профилей CRL.
См. getSigAlgName для соответствующих определений ASN.1.
- Возвращает:
- строку OID алгоритма подписи.
getSigAlgParams
public abstract byte[] getSigAlgParams()
Получает закодированные в DER параметры алгоритма подписи из алгоритма подписи этого сертификата. В большинстве случаев параметры алгоритма подписи равны null; параметры обычно поставляются вместе с открытым ключом сертификата. Если вам нужны значения отдельных параметров, используйте 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 Получает неизменяемый список строк, представляющих OBJECT IDENTIFIERы поля 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).
Расширение основных ограничений определяет, является ли субъект сертификата центром сертификации (ЦС) и насколько глубоким может быть путь сертификации через этот ЦС. Поле 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} Если этот сертификат не содержит расширения 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. Для otherNames, имён X.400, имён сторон EDI или других типов имён стандартный строковый формат не определён. Они возвращаются в виде массивов байтов, содержащих ASN.1 DER-кодированную форму имени.
Обратите внимание, что возвращаемое Collection может содержать более одного имени одного типа. Также обратите внимание, что возвращаемое Collection неизменяемо, и все записи, содержащие массивы байтов, дублируются, чтобы предотвратить последующие изменения.
Этот метод был добавлен в версию 1.4 платформы Java 2 Platform Standard Edition. Для обеспечения обратной совместимости с существующими поставщиками услуг этот метод не abstract и предоставляет реализацию по умолчанию. Подклассы должны переопределить этот метод с правильной реализацией.
- Возвращает:
- неизменяемую
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 Проверяет, был ли этот сертификат подписан с использованием закрытого ключа, соответствующего указанному открытому ключу. Этот метод использует механизм проверки подписи, предоставленный указанным поставщиком. Обратите внимание, что указанный объект поставщика не обязательно должен быть зарегистрирован в списке поставщиков. Этот метод был добавлен в версию 1.8 платформы Java Platform Standard Edition. Для обеспечения обратной совместимости с существующими поставщиками услуг этот метод не abstract и предоставляет реализацию по умолчанию.
- Переопределяет:
-
verifyв классеCertificate - Параметры:
-
key- PublicKey, используемый для выполнения проверки. -
sigProvider- поставщик подписи. - Выбрасывает:
-
NoSuchAlgorithmException- при недопустимых алгоритмах подписи. -
InvalidKeyException- при некорректном ключе. -
SignatureException- при ошибках подписи. -
CertificateException- при ошибках кодирования. -
UnsupportedOperationException- если метод не поддерживается - С:
- 1.8
© 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.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/security/cert/X509Certificate.html