モジュール java.base
パッケージ java.security.cert

クラス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証明書のすべての属性にアクセスするための標準的な方法を提供します。

基本的なX.509 v3形式は、1996年6月に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)などがあります。

これらの証明書は、証明書発行局 (CA)によって管理および保証されています。 CAは、データをX.509標準形式にしてから、そのデータにデジタル署名することにより証明書を作成するサービスです。 CAは信頼できる第三者として機能し、直接には面識のない主体同士を紹介します。 CA証明書は、そのCA自身で、または「ルート」CAなどのほかのCAによって署名されています。

詳細は、RFC 5280「Internet X.509 Public Key Infrastructure Certificate and CRL Profile」を参照してください。

tbsCertificateのASN.1定義は次のとおりです。

 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
関連項目:
  • コンストラクタの詳細

    • X509Certificate

      protected X509Certificate()
      X.509証明書のコンストラクタです。
  • メソッドの詳細

    • checkValidity

      public abstract void checkValidity() throws CertificateExpiredException, CertificateNotYetValidException
      証明書が現在有効であるかどうかを判定します。 現在の日時が、証明書で指定された有効期間内であるかどうかを調べます。

      有効期間は、証明書が有効である最初の日時と最後の日時の2つの日時値から成ります。 これは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 - 指定された日時にこの証明書が有効であるかどうかを調べる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値を取得します。 シリアル番号は、証明書発行局によって各証明書に割り当てられる整数値です。 シリアル番号は、指定されたCAによって発行された各証明書に対して一意である必要があります。つまり、発行者名とシリアル番号によって一意の証明書が識別されます。 ASN.1定義は次のとおりです。
       serialNumber     CertificateSerialNumber
      
       CertificateSerialNumber  ::=  INTEGER
       
      戻り値:
      シリアル番号
    • getIssuerDN

      @Deprecated(since="16") public abstract Principal getIssuerDN()
      非推奨。
      代わりにgetIssuerX500Principal()を使用してください。 このメソッドは、移植可能なコードに依存しない実装固有のPrincipalオブジェクトとして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には、国名などの属性とそれに対応する、USなどの値からなる階層的な名前を記述します。 AttributeValueコンポーネントの型は、AttributeTypeによって決まります。一般的には、directoryStringです。 directoryStringは、通常PrintableStringTeletexStringUniversalStringのいずれかです。

      戻り値:
      名前が発行者識別名であるPrincipal
    • getIssuerX500Principal

      public X500Principal getIssuerX500Principal()
      証明書から発行者(発行者識別名)の値をX500Principalとして返します。

      サブクラスでこのメソッドをオーバーライドすることをお薦めします。

      戻り値:
      発行者識別名を表すX500Principal
      導入されたバージョン:
      1.4
    • getSubjectDN

      @Deprecated(since="16") public abstract Principal getSubjectDN()
      非推奨。
      代わりにgetSubjectX500Principal()を使用してください。 このメソッドは、移植可能なコードに依存しない実装固有のPrincipalオブジェクトとしてsubjectを返します。
      証明書からsubject (サブジェクト識別名)値を取得します。 subject値が空の場合、返されるPrincipalオブジェクトのgetName()メソッドは空の文字列("")を返します。

      ASN.1定義は次のとおりです。

       subject    Name
       

      Nameおよびその他の関連する定義については、getIssuerDNを参照してください。

      戻り値:
      名前がサブジェクト名であるPrincipal
    • getSubjectX500Principal

      public X500Principal getSubjectX500Principal()
      証明書からサブジェクト(サブジェクト識別名)の値をX500Principalとして返します。 サブジェクト値が空の場合、返されるX500PrincipalオブジェクトのgetName()メソッドは空の文字列("")を返します。

      サブクラスでこのメソッドをオーバーライドすることをお薦めします。

      戻り値:
      サブジェクト名を表す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
      この証明書から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
       

      アルゴリズム名はalgorithm OID文字列から判定されます。

      戻り値:
      署名アルゴリズム名
    • getSigAlgOID

      public abstract String getSigAlgOID()
      証明書から署名アルゴリズムのOID文字列を取得します。 OIDはピリオドで区切られた負にならない整数のセットで表されます。 たとえば、文字列「1.2.840.10040.4.3」では、RFC 3279「Algorithms and Identifiers for the Internet X.509 Public Key Infrastructure Certificate and CRL Profile」で定義されている、DSA署名アルゴリズムを持つSHA-1が識別されます。

      該当するASN.1定義については、getSigAlgNameを参照してください。

      戻り値:
      署名アルゴリズムのOID文字列
    • getSigAlgParams

      public abstract byte[] getSigAlgParams()
      この証明書の署名アルゴリズムから、DERでエンコードされた署名アルゴリズム・パラメータを取得します。 ほとんどの場合、署名アルゴリズム・パラメータはnullで、通常は証明書の公開キーとともに提供されます。 個々のパラメータ値へのアクセスが必要な場合は、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)のビットを表すboolean配列を取得します。 キー使用目的の拡張機能は、証明書に設定されているキーの使用目的(暗号用、署名用、証明書署名用など)を定義します。 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リストが上記のリストより長い場合でも切り詰められることはない。 この証明書にKeyUsage拡張機能がない場合はnullを返す
    • getExtendedKeyUsage

      public List<String> getExtendedKeyUsage() throws CertificateParsingException
      拡張キー使用法の拡張機能(OID = 2.5.29.37)にあるExtKeyUsageSyntaxフィールドのオブジェクト識別子を表す変更不可能なStringのリストを取得します。 これは、キー使用法の拡張機能フィールドに示されている基本的な目的に加えて、あるいはその基本的な目的の代わりに、公開キーが使われる目的(複数可)を表します。 ASN.1定義は次のとおりです。
       ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId
      
       KeyPurposeId ::= OBJECT IDENTIFIER
       
      キーの目的は、ニーズに合わせて組織で定義します。 キーの目的を特定するオブジェクト識別子は、IANAまたはITU-TのRec. X.660、あるいはISO/IEC/ITU 9834-1に従って割り当てられなければいけません。

      このメソッドは、Java 2 Platform Standard Editionのバージョン1.4で追加されました。 既存のサービス・プロバイダとの下位互換性を維持するため、このメソッドはabstractではなく、デフォルトの実装を提供します。 サブクラスは正しい実装でこのメソッドをオーバーライドしなければいけません。

      戻り値:
      Stringで表されるオブジェクト識別子の変更不可能なリストとしての、この証明書のExtendedKeyUsage拡張機能。 この証明書にExtendedKeyUsage拡張機能が含まれない場合はnullを返す
      例外:
      CertificateParsingException - 拡張機能が復号化できなかった場合
      導入されたバージョン:
      1.4
    • getBasicConstraints

      public abstract int getBasicConstraints()
      クリティカルなBasicConstraints拡張機能(OID = 2.5.29.19)から証明書の制約のパスの長さを取得します。

      基本制約拡張機能は、証明書のサブジェクトが証明書発行局(CA)であるかどうか、およびそのCAの証明書パスの深さを識別します。 pathLenConstraintフィールド(下記を参照)は、cAがTRUEに設定されている場合にだけ有効です。 この場合、証明書パスでこの証明書のあとに続くCA証明書の最大数を示します。 値0は、エンド・エンティティの証明書だけであることを示します。

      ASN.1定義は次のとおりです。

       BasicConstraints ::= SEQUENCE {
           cA                  BOOLEAN DEFAULT FALSE,
           pathLenConstraint   INTEGER (0..MAX) OPTIONAL }
       

      戻り値:
      証明書にBasicConstraints拡張機能がありサブジェクトがCAの場合はpathLenConstraintの値で、そうでない場合は -1。 サブジェクトがCAでpathLenConstraintが表示されない場合は、証明書パスの長さに制限がないことが示すためInteger.MAX_VALUEが返される
    • getSubjectAlternativeNames

      public Collection<List<?>> getSubjectAlternativeNames() throws CertificateParsingException
      SubjectAltName拡張機能(OID = 2.5.29.17)から、サブジェクトの代替名の不変なコレクションを取得します。

      SubjectAltName拡張機能のASN.1定義は次のとおりです。

       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が返されます。 そうでない場合は、拡張機能に含まれる各GeneralNameを表すエントリを含むCollectionが返されます。 各エントリはListで、その最初のエントリはInteger (名前タイプ、0-8)、2番目のエントリはStringかバイト配列(それぞれが文字列形式またはASN.1 DER符号化形式の名前)になります。

      RFC 822、DNS、URIの各名前はStringとして返されます。このとき、RFC 5280に含まれる制限に従って、それぞれのタイプで明確に定義された文字列フォーマットが用いられます。 IPv4アドレス名はドットで4つに区切られた表記法で返されます。 IPv6アドレス名は、「a1:a2:...:a8」という形式で返されます。a1 - a8は、16進数表記で、アドレスを16ビットずつで8つに分割しています。 OID名は、ピリオドで区切られた負にならない一連の整数で表されるStringとして返されます。 ディレクトリ名(識別名)はRFC 2253文字列フォーマットで返されます。 otherName、X.400名、EDI相手名、そのほかのタイプの名前には、標準の文字列形式はありません。 名前のASN.1 DER符号化形式を含むバイト配列として返されます。

      返されるCollectionには、同じタイプの名前が複数含まれていることがあります。 また、返されるCollectionは不変であり、バイト配列を含むエントリはいずれも以後の変更から保護するために複製されています。

      このメソッドは、Java 2 Platform Standard Editionのバージョン1.4で追加されました。 既存のサービス・プロバイダとの下位互換性を維持するため、このメソッドはabstractではなく、デフォルトの実装を提供します。 サブクラスは正しい実装でこのメソッドをオーバーライドしなければいけません。

      戻り値:
      サブジェクトの代替名から成る不変のCollection。またはnull
      例外:
      CertificateParsingException - 拡張機能が復号化できなかった場合
      導入されたバージョン:
      1.4
    • getIssuerAlternativeNames

      public Collection<List<?>> getIssuerAlternativeNames() throws CertificateParsingException
      IssuerAltName拡張機能(OID = 2.5.29.18)から、発行者の代替名の不変なコレクションを取得します。

      IssuerAltName拡張機能のASN.1定義は次のとおりです。

       IssuerAltName ::= GeneralNames
       
      GeneralNamesのASN.1定義は、getSubjectAlternativeNamesにあります。

      この証明書にIssuerAltName拡張機能が含まれない場合は、nullが返されます。 そうでない場合は、拡張機能に含まれる各GeneralNameを表すエントリを含むCollectionが返されます。 各エントリはListで、その最初のエントリはInteger (名前タイプ、0-8)、2番目のエントリはStringかバイト配列(それぞれが文字列形式またはASN.1 DER符号化形式の名前)になります。 それぞれの名前型で使われる形式の詳細については、getSubjectAlternativeNamesメソッドを参照してください。

      返されるCollectionには、同じタイプの名前が複数含まれていることがあります。 また、返されるCollectionは不変であり、バイト配列を含むエントリはいずれも以後の変更から保護するために複製されています。

      このメソッドは、Java 2 Platform Standard Editionのバージョン1.4で追加されました。 既存のサービス・プロバイダとの下位互換性を維持するため、このメソッドはabstractではなく、デフォルトの実装を提供します。 サブクラスは正しい実装でこのメソッドをオーバーライドしなければいけません。

      戻り値:
      発行者の代替名から成る不変のCollection。またはnull
      例外:
      CertificateParsingException - 拡張機能が復号化できなかった場合
      導入されたバージョン:
      1.4
    • verify

      指定された公開キーに対応する非公開キーを使って、この証明書が署名されたことを検証します。 このメソッドは、指定されたプロバイダによって提供される署名検証エンジンを使用します。 指定されたProviderオブジェクトは、プロバイダ・リストに登録する必要はありません。 このメソッドは、Java Platform Standard Editionのバージョン1.8で追加されました。 既存のサービス・プロバイダとの下位互換性を維持するため、このメソッドはabstractではなく、デフォルトの実装を提供します。
      オーバーライド:
      verify、クラス: Certificate
      パラメータ:
      key - 検証の実行に使うPublicKey。
      sigProvider - 署名プロバイダ。
      例外:
      NoSuchAlgorithmException - サポートされていない署名アルゴリズムの場合。
      InvalidKeyException - 無効なキーの場合
      SignatureException - 署名エラーの場合。
      CertificateException - 符号化エラーの場合。
      UnsupportedOperationException - メソッドがサポートされていない場合
      導入されたバージョン:
      1.8