- 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 5280Internet 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
, 直列化された形式
-
-
ネストされたクラスのサマリー
-
クラス 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 = 2.5.29.37)にあるExtKeyUsageSyntax
フィールドのオブジェクト識別子を表す変更不可能なStringのリストを取得します。Collection<List<?>>
getIssuerAlternativeNames()
IssuerAltName
拡張機能(OID = 2.5.29.18)から、発行者の代替名の不変なコレクションを取得します。abstract Principal
getIssuerDN()
非推奨: getIssuerX500Principal()で置き換えられました。abstract boolean[]
getIssuerUniqueID()
証明書からissuerUniqueID
値を取得します。X500Principal
getIssuerX500Principal()
証明書から発行者(発行者識別名)の値をX500Principal
として返します。abstract boolean[]
getKeyUsage()
KeyUsage
拡張機能(OID = 2.5.29.15)のビットを表すboolean配列を取得します。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()
証明書からサブジェクト(サブジェクト識別名)の値を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.security.cert.X509Extensionで宣言されたメソッド
getCriticalExtensionOIDs, getExtensionValue, getNonCriticalExtensionOIDs, hasUnsupportedCriticalExtension
-
-
-
-
メソッドの詳細
-
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
は、通常PrintableString
、TeletexString
、UniversalString
のいずれかです。- 戻り値:
- 名前が発行者識別名である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文字列から判定されます。- 戻り値:
- 署名アルゴリズム名
-
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
public void verify(PublicKey key, Provider sigProvider) throws CertificateException, NoSuchAlgorithmException, InvalidKeyException, SignatureException
指定された公開鍵に対応する非公開鍵を使って、この証明書が署名されたことを検証します。 このメソッドは、指定されたプロバイダによって提供される署名検証エンジンを使用します。 指定されたProviderオブジェクトは、プロバイダ・リストに登録する必要はありません。 このメソッドは、Java Platform Standard Editionのバージョン1.8で追加されました。 既存のサービス・プロバイダとの下位互換性を維持するため、このメソッドはabstract
ではなく、デフォルトの実装を提供します。- オーバーライド:
verify
、クラス:Certificate
- パラメータ:
key
- 検証の実行に使うPublicKey。sigProvider
- 署名プロバイダ。- 例外:
NoSuchAlgorithmException
- サポートされていない署名アルゴリズムの場合。InvalidKeyException
- 無効な鍵の場合。SignatureException
- 署名エラーの場合。CertificateException
- 符号化エラーの場合。UnsupportedOperationException
- メソッドがサポートされていない場合- 導入されたバージョン:
- 1.8
-
-