クラスX509Certificate
- すべての実装されたインタフェース:
Serializable,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
- 外部仕様
- 関連項目:
-
ネストされたクラスのサマリー
クラスjava.security.cert.Certificateで宣言されたネストされたクラス/インタフェース
Certificate.CertificateRep -
コンストラクタのサマリー
コンストラクタ -
メソッドのサマリー
修飾子と型メソッド説明abstract void証明書が現在有効であるかどうかを判定します。abstract voidcheckValidity(Date date) 指定された日付が、証明書の有効期間内であるかどうかを判定します。abstract intクリティカルなBasicConstraints拡張機能(OID = 2.5.29.19)から証明書の制約のパスの長さを取得します。拡張キー使用法の拡張機能(OID = 2.5.29.37)にあるExtKeyUsageSyntaxフィールドのオブジェクト識別子を表す変更不可能なStringのリストを取得します。Collection<List<?>> IssuerAltName拡張機能(OID = 2.5.29.18)から、発行者の代替名の不変なコレクションを取得します。abstract Principal非推奨。abstract boolean[]証明書からissuerUniqueID値を取得します。証明書から発行者(発行者識別名)の値をX500Principalとして返します。abstract boolean[]KeyUsage拡張機能(OID = 2.5.29.15)のビットを表すboolean配列を取得します。abstract Date証明書の有効期間からnotAfterの日付を取得します。abstract Date証明書の有効期間からnotBeforeの日付を取得します。abstract BigInteger証明書からserialNumber値を取得します。abstract String証明書の署名アルゴリズム名を取得します。abstract String証明書から署名アルゴリズムのOID文字列を取得します。abstract byte[]この証明書の署名アルゴリズムから、DERでエンコードされた署名アルゴリズム・パラメータを取得します。abstract byte[]証明書からsignature値(生のシグネチャ・ビット)を取得します。Collection<List<?>> SubjectAltName拡張機能(OID = 2.5.29.17)から、サブジェクトの代替名の不変なコレクションを取得します。abstract Principal非推奨。代わりにgetSubjectX500Principal()を使用してください。abstract boolean[]証明書からsubjectUniqueID値を取得します。証明書からサブジェクト(サブジェクト識別名)の値をX500Principalとして返します。abstract byte[]この証明書からDERで符号化された証明書情報tbsCertificateを取得します。abstract int証明書からversion(バージョン番号)値を取得します。void指定された公開キーに対応する非公開キーを使って、この証明書が署名されたことを検証します。クラスjava.security.cert.Certificateで宣言されたメソッド
equals, getEncoded, getPublicKey, getType, hashCode, toString, verify, verify, writeReplaceインタフェースjava.security.cert.X509Extensionで宣言されたメソッド
getCriticalExtensionOIDs, getExtensionValue, getNonCriticalExtensionOIDs, hasUnsupportedCriticalExtension
-
コンストラクタの詳細
-
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 ::= ANYNameには、国名などの属性とそれに対応する、USなどの値からなる階層的な名前を記述します。AttributeValueコンポーネントの型は、AttributeTypeによって決まります。一般的には、directoryStringです。directoryStringは、通常PrintableString、TeletexString、UniversalStringのいずれかです。- 戻り値:
- 名前が発行者識別名である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アルゴリズム名は
algorithmOID文字列から判定されます。- 戻り値:
- 署名アルゴリズム名。
-
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 CertificateParsingExceptionSubjectAltName拡張機能(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} OtherName ::= SEQUENCE { type-id OBJECT IDENTIFIER, value [0] EXPLICIT ANY DEFINED BY type-id }この証明書に
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文字列形式で返されます。 X.400名またはEDIパーティ名に対して標準文字列書式が定義されていません。 名前のASN.1 DERエンコード形式を含むバイト配列として返されます。otherNamesは、名前のASN.1 DERエンコード形式を含むバイト配列としても返されます。 3番目のエントリは、文字列形式のotherNameのtype-idを含むリストにも存在し、そのvalueを含む4番目のエントリは、文字列(値がサポートされている有効な文字列である場合)として存在するか、またはコンテキスト固有の構築されたタグのない値のASN.1 DERエンコード形式を含むバイト配列として存在します。返される
Collectionには、同じタイプの名前が複数含まれていることがあります。 また、返されるCollectionは不変であり、バイト配列を含むエントリはいずれも以後の変更から保護するために複製されています。このメソッドは、Java 2 Platform Standard Editionのバージョン1.4で追加されました。 既存のサービス・プロバイダとの下位互換性を維持するため、このメソッドは
abstractではなく、デフォルトの実装を提供します。 サブクラスは正しい実装でこのメソッドをオーバーライドしなければいけません。- 実装上のノート:
- JDK SUNプロバイダでは、3番目と4番目のotherNameエントリがサポートされています。
- 戻り値:
- サブジェクトの代替名から成る不変の
Collection。またはnull - スロー:
CertificateParsingException- 拡張機能が復号化できなかった場合- 導入されたバージョン:
- 1.4
- 外部仕様
-
getIssuerAlternativeNames
public Collection<List<?>> getIssuerAlternativeNames() throws CertificateParsingExceptionIssuerAltName拡張機能(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
-
getIssuerX500Principal()を使用してください。