Spec-Zone.ru › OpenJDK 8

Класс 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);
 }
См. также:
Certificate, CertificateFactory, X509Extension, Сериализованная форма

Вложенные классы

Вложенные классы/интерфейсы, унаследованные от класса java.security.cert.Certificate

Certificate.CertificateRep

Конструкторы

Модификатор Конструктор и описание
protected X509Certificate()

Конструктор для сертификатов X.509.

Методы

Модификатор и тип Метод и описание
abstract void checkValidity()

Проверяет, является ли сертификат в настоящее время действительным.

abstract void checkValidity(Date date)

Проверяет, попадает ли заданная дата в период действия сертификата.

abstract int getBasicConstraints()

Получает длину пути ограничений сертификата из критического BasicConstraints расширения (OID = 2.5.29.19).

List<String> getExtendedKeyUsage()

Получает неупорядоченный список строк, представляющих идентификаторы объектов (OID) поля ExtKeyUsageSyntax расширения расширенного использования ключа (OID = 2.5.29.37).

Collection<List<?>> getIssuerAlternativeNames()

Получает неизменяемую коллекцию альтернативных имен эмитента из IssuerAltName расширения (OID = 2.5.29.18).

abstract Principal getIssuerDN()

Устаревший, заменён на getIssuerX500Principal().

abstract boolean[] getIssuerUniqueID()

Получает значение issuerUniqueID из сертификата.

X500Principal getIssuerX500Principal()

Возвращает значение эмитента (имя distinguished name эмитента) из сертификата в виде 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<List<?>> getSubjectAlternativeNames()

Получает неизменяемую коллекцию альтернативных имен субъекта из SubjectAltName расширения (OID = 2.5.29.17).

abstract Principal getSubjectDN()

Устаревший, заменён на getSubjectX500Principal().

abstract boolean[] getSubjectUniqueID()

Получает значение subjectUniqueID из сертификата.

X500Principal getSubjectX500Principal()

Возвращает значение субъекта (имя distinguished name субъекта) из сертификата в виде X500Principal.

abstract byte[] getTBSCertificate()

Получает закодированные в DER данные о сертификате, tbsCertificate данного сертификата.

abstract int getVersion()

Получает значение version (номер версии) из сертификата.

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
Name описывает иерархическое имя, составленное из атрибутов, таких как имя страны, и соответствующих значений, таких как US. Тип компонента AttributeValue определяется AttributeType; как правило, это будет directoryString. 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: Algorithms and Identifiers for the Internet X.509 Public Key Infrastructure Certificate and CRL Profile.

См. 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).

Расширение основных ограничений определяет, является ли субъект сертификата центром сертификации (CA) и насколько глубоким может быть путь сертификации через этот CA. Поле pathLenConstraint (см. ниже) имеет смысл только в том случае, если cA установлено в TRUE. В этом случае оно указывает максимальное количество сертификатов CA, которые могут следовать за этим сертификатом в пути сертификации. Значение ноль указывает, что в пути может следовать только сертификат конечного узла.

Следующее определение 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}

Если этот сертификат не содержит расширения 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

Проверяет, был ли этот сертификат подписан с использованием закрытого ключа, соответствующего указанному открытому ключу. Этот метод использует движок проверки подписи, предоставляемый указанным поставщиком. Обратите внимание, что указанный объект Provider не обязательно должен быть зарегистрирован в списке поставщиков. Этот метод был добавлен в версию 1.8 платформы Java Platform Standard Edition. Для обеспечения обратной совместимости с существующими поставщиками услуг этот метод не abstract и предоставляет реализацию по умолчанию.

Переопределяет:
verify в классе Certificate
Параметры:
key - открытый ключ, используемый для проведения проверки.
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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API