モジュール java.base
パッケージ 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
    関連項目:
    Certificate, CertificateFactory, X509Extension, 直列化された形式
    • コンストラクタの詳細

      • 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に証明書がまだ有効になっていない場合。
        関連項目:
        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値を取得します。 シリアル番号は、証明書発行局によって各証明書に割り当てられる整数値です。 シリアル番号は、指定されたCAによって発行された各証明書に対して一意である必要があります。つまり、発行者名とシリアル番号によって一意の証明書が識別されます。 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は、通常PrintableStringTeletexStringUniversalStringのいずれかです。

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

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

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

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

        public abstract Principal getSubjectDN()
        非推奨: getSubjectX500Principal()で置き換えられました。 このメソッドは、subjectを実装固有のPrincipalオブジェクトとして返します。移植性のあるコードがこのようなオブジェクトに依存すべきではありません。

        証明書から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 }
         
        戻り値:
        有効期間の開始日
        関連項目:
        checkValidity()
      • getNotAfter

        public abstract Date getNotAfter()
        証明書の有効期間からnotAfterの日付を取得します。 該当するASN.1定義については、getNotBeforeを参照してください。
        戻り値:
        有効期間の終了日
        関連項目:
        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
         

        アルゴリズム名はalgorithm 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

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