public class KeyStore extends Object
KeyStoreは異なるタイプのエントリを管理します。個々のエントリ・タイプはKeyStore.Entryインタフェースを実装します。次の3つの基本KeyStore.Entry実装が提供されています。
このタイプのエントリには暗号化PrivateKeyが格納されます。許可されないアクセスを防ぐために保護形式で格納できるようになっています。また、対応する公開鍵の証明書チェーンもいっしょに格納されます。
非公開鍵と証明書チェーンは、指定されたエンティティによって自身の認証のために使用されます。この認証が利用されるのは、ソフトウェア配布組織がソフトウェアのリリースやライセンス供与の一貫としてJARファイルに署名する場合などです。
このタイプのエントリには暗号化SecretKeyが格納されます。許可されないアクセスを防ぐために保護形式で格納できるようになっています。
このタイプのエントリには別の組織に属する単一の公開鍵Certificateが格納されます。これは信頼できる証明書と呼ばれますが、それは、キーストアの所有者が、証明書内の公開鍵が実際に証明書のサブジェクト (所有者)によって識別されたアイデンティティに属することを信頼するためです。
この種類のエントリは、ほかの組織の認証に使うことができます。
キーストア内の各エントリは、「別名」文字列によって識別されます。非公開鍵とそれに関連付けられた証明書チェーンの場合は、これらの文字列は、エンティティ自体が認証するというように、方法別に区別されます。たとえば、エンティティが異なる証明書発行局を使ったり、異なる公開鍵アルゴリズムを使ったりして、エンティティ自体を認証することも可能です。
別名の大文字と小文字が区別されるかどうかは、実装によって異なります。問題の発生を防ぐため、KeyStore内では、大文字と小文字の区別が異なるだけの別名を使用しないようにしてください。
キーストアが持続性があるかどうか、および持続性がある場合に使われるメカニズムは、ここでは指定されません。これにより、重要な(秘密または非公開)鍵を保護するためのさまざまな技術を使うことができます。スマート・カードまたはその他の統合暗号化エンジン(SafeKeyper)を使うことも1つの方法です。また、ファイルなどのより単純なメカニズムをさまざまな形式で使うこともできます。
KeyStoreオブジェクトを要求する典型的な方法としては、デフォルトのタイプを利用する方法と、特定のキーストア・タイプを指定する方法があります。
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
システムは、デフォルト・タイプのキーストア実装を返します。
KeyStore ks = KeyStore.getInstance("JKS");
システムは、環境内で利用可能な実装のうち、指定されたキーストア・タイプにもっとも適したものを返します。
キーストアにアクセスできるようにするには、ロード(loaded)する必要があります。
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
// get user password and file input stream
char[] password = getPassword();
try (FileInputStream fis = new FileInputStream("keyStoreName")) {
ks.load(fis, password);
}
上記のloadメソッドを使って空のキーストアを作成するには、InputStream引数としてnullを渡します。
キーストアのロードが完了すると、既存のエントリをキーストアから読み取ったり、新しいエントリをキーストアに書き込んだりできます。
KeyStore.ProtectionParameter protParam =
new KeyStore.PasswordProtection(password);
// get my private key
KeyStore.PrivateKeyEntry pkEntry = (KeyStore.PrivateKeyEntry)
ks.getEntry("privateKeyAlias", protParam);
PrivateKey myPrivateKey = pkEntry.getPrivateKey();
// save my secret key
javax.crypto.SecretKey mySecretKey;
KeyStore.SecretKeyEntry skEntry =
new KeyStore.SecretKeyEntry(mySecretKey);
ks.setEntry("secretKeyAlias", skEntry, protParam);
// store away the keystore
try (FileOutputStream fos = new FileOutputStream("newKeyStoreName")) {
ks.store(fos, password);
}
なお、上記サンプル・コードで示したように、キーストアのロード、非公開鍵エントリの保護、秘密鍵エントリの保護、およびキーストアの格納には同じパスワードを使用できますが、異なるパスワードやその他の保護パラメータも使用できます。
Javaプラットフォームの実装は、すべて次の標準のKeyStoreタイプをサポートする必要があります。
PKCS12PrivateKey, SecretKey, Certificate| 修飾子と型 | クラスと説明 |
|---|---|
static class |
KeyStore.Builder
インスタンス化すべきKeyStoreオブジェクトを記述したクラスです。
|
static class |
KeyStore.CallbackHandlerProtection
CallbackHandlerをカプセル化したProtectionParameterです。
|
static interface |
KeyStore.Entry
KeyStoreエントリの種類に対するマーカー・インタフェースです。 |
static interface |
KeyStore.LoadStoreParameter
|
static class |
KeyStore.PasswordProtection
ProtectionParameterのパスワードベースの実装です。 |
static class |
KeyStore.PrivateKeyEntry
特定の
PrivateKeyと対応する証明書チェーンが格納されたKeyStoreエントリです。 |
static interface |
KeyStore.ProtectionParameter
キーストアの保護パラメータに対するマーカー・インタフェースです。
|
static class |
KeyStore.SecretKeyEntry
特定の
SecretKeyが格納されたKeyStoreエントリです。 |
static class |
KeyStore.TrustedCertificateEntry
信頼できる
Certificateが格納されたKeyStoreエントリです。 |
| 修飾子 | コンストラクタと説明 |
|---|---|
protected |
KeyStore(KeyStoreSpi keyStoreSpi, Provider provider, String type)
指定されたタイプのKeyStoreオブジェクトを作成し、そのオブジェクトで、指定されたプロバイダの実装であるSPIオブジェクトをカプセル化します。
|
| 修飾子と型 | メソッドと説明 |
|---|---|
Enumeration<String> |
aliases()
このキーストアのすべての別名を一覧表示します。
|
boolean |
containsAlias(String alias)
このキーストアに、指定された別名が存在するかどうかを判定します。
|
void |
deleteEntry(String alias)
このキーストアから、指定された別名によって識別されるエントリを削除します。
|
boolean |
entryInstanceOf(String alias, Class<? extends KeyStore.Entry> entryClass)
指定された
aliasのキーストアEntryが、指定されたentryClassのインスタンスまたはサブクラスであるかどうかを判定します。 |
Certificate |
getCertificate(String alias)
指定された別名に関連した証明書を返します。
|
String |
getCertificateAlias(Certificate cert)
指定された証明書と一致する証明書がある最初のキーストア・エントリの別名を返します。
|
Certificate[] |
getCertificateChain(String alias)
指定された別名に関連付けられた証明書チェーンを返します。
|
Date |
getCreationDate(String alias)
指定された別名によって識別されるエントリの作成日を返します。
|
static String |
getDefaultType()
keystore.typeセキュリティ・プロパティに指定されているデフォルトのキーストア・タイプを返します。該当するプロパティが存在しない場合は文字列「jks」(「Java keystore」の略語)を返します。 |
KeyStore.Entry |
getEntry(String alias, KeyStore.ProtectionParameter protParam)
指定された保護パラメータを使用して、指定された別名に対するキーストア
Entryを取得します。 |
static KeyStore |
getInstance(String type)
指定されたタイプのキーストア・オブジェクトを返します。
|
static KeyStore |
getInstance(String type, Provider provider)
指定されたタイプのキーストア・オブジェクトを返します。
|
static KeyStore |
getInstance(String type, String provider)
指定されたタイプのキーストア・オブジェクトを返します。
|
Key |
getKey(String alias, char[] password)
指定されたパスワードを使って、指定された別名に関連した鍵を復元し、その鍵を返します。
|
Provider |
getProvider()
このキーストアのプロバイダを返します。
|
String |
getType()
このキーストア・タイプを返します。
|
boolean |
isCertificateEntry(String alias)
指定された別名で識別されるエントリが、
setCertificateEntryを呼び出して作成されたエントリ、あるいはTrustedCertificateEntryを指定してsetEntryを呼び出して作成されたエントリのいずれかである場合、trueを返します。 |
boolean |
isKeyEntry(String alias)
指定された別名で識別されるエントリが、
setKeyEntryを呼び出して作成されたエントリ、あるいはPrivateKeyEntryまたはSecretKeyEntryを指定してsetEntryを呼び出して作成されたエントリのいずれかである場合、trueを返します。 |
void |
load(InputStream stream, char[] password)
指定された入力ストリームからこのキーストアをロードします。
|
void |
load(KeyStore.LoadStoreParameter param)
指定された
LoadStoreParameterを使用してこのキーストアをロードします。 |
void |
setCertificateEntry(String alias, Certificate cert)
指定された別名に、指定された信頼できる証明書を割り当てます。
|
void |
setEntry(String alias, KeyStore.Entry entry, KeyStore.ProtectionParameter protParam)
キーストア
Entryを指定された別名で保存します。 |
void |
setKeyEntry(String alias, byte[] key, Certificate[] chain)
指定された別名に、すでに保護されている指定の鍵を割り当てます。
|
void |
setKeyEntry(String alias, Key key, char[] password, Certificate[] chain)
指定された別名に指定された鍵を割り当て、指定されたパスワードでその鍵を保護します。
|
int |
size()
このキーストアのエントリ数を取得します。
|
void |
store(KeyStore.LoadStoreParameter param)
指定された
LoadStoreParameterを使用してこのキーストアを格納します。 |
void |
store(OutputStream stream, char[] password)
指定された出力ストリームにこのキーストアを格納し、指定されたパスワードでその整合性を保護します。
|
protected KeyStore(KeyStoreSpi keyStoreSpi, Provider provider, String type)
keyStoreSpi - プロバイダの実装。provider - プロバイダ。type - キーストア・タイプ。public static KeyStore getInstance(String type) throws KeyStoreException
このメソッドは、最優先のProviderから順に、登録済みのセキュリティProviderのリストをトラバースします。指定されたタイプをサポートする最初のProviderのKeyStoreSpi実装をカプセル化する新しいKeyStoreオブジェクトが返されます。
登録済みプロバイダのリストは、Security.getProviders()メソッド経由で取得できます。
type - キーストアのタイプ。標準のキーストア・タイプについては、Java暗号化アーキテクチャ標準アルゴリズム名のドキュメントのKeyStoreのセクションを参照。KeyStoreException - 指定されたタイプのKeyStoreSpi実装をサポートするProviderが存在しない場合。Providerpublic static KeyStore getInstance(String type, String provider) throws KeyStoreException, NoSuchProviderException
指定されたプロバイダのKeyStoreSpi実装をカプセル化する新しいKeyStoreオブジェクトが返されます。指定したプロバイダは、セキュリティ・プロバイダ・リストに登録する必要があります。
登録済みプロバイダのリストは、Security.getProviders()メソッド経由で取得できます。
type - キーストアのタイプ。標準のキーストア・タイプについては、Java暗号化アーキテクチャ標準アルゴリズム名のドキュメントのKeyStoreのセクションを参照。provider - プロバイダ名。KeyStoreException - 指定されたプロバイダに指定されたタイプのKeyStoreSpi実装がない場合。NoSuchProviderException - 指定されたプロバイダがセキュリティ・プロバイダ・リストに登録されていない場合。IllegalArgumentException - プロバイダ名がnullまたは空の場合。Providerpublic static KeyStore getInstance(String type, Provider provider) throws KeyStoreException
指定されたProviderオブジェクトのKeyStoreSpi実装をカプセル化する新しいKeyStoreオブジェクトが返されます。指定されたProviderオブジェクトは、プロバイダ・リストに登録する必要はありません。
type - キーストアのタイプ。標準のキーストア・タイプについては、Java暗号化アーキテクチャ標準アルゴリズム名のドキュメントのKeyStoreのセクションを参照。provider - プロバイダ。KeyStoreException - 指定されたProviderオブジェクトに指定されたタイプのKeyStoreSpi実装がない場合。IllegalArgumentException - 指定されたプロバイダがnullの場合。Providerpublic static final String getDefaultType()
keystore.typeセキュリティ・プロパティに指定されているデフォルトのキーストア・タイプを返します。該当するプロパティが存在しない場合は文字列「jks」(「Java keystore」の略語)を返します。
デフォルトのキーストア・タイプを使用するのは、アプリケーションでgetInstanceメソッドを呼び出すときに、ハードコードされたキーストア・タイプを使用しない場合、およびユーザーが独自のキーストア・タイプを指定しないときに、デフォルトのキーストア・タイプを提供する場合です。
デフォルトのキーストア・タイプは、keystore.typeセキュリティ・プロパティの値を目的のキーストア・タイプに設定することで変更できます。
keystore.typeセキュリティ・プロパティに指定されたデフォルトのキーストア・タイプ、該当するプロパティが存在しない場合は文字列「jks」。セキュリティ・プロパティpublic final Provider getProvider()
public final String getType()
public final Key getKey(String alias, char[] password) throws KeyStoreException, NoSuchAlgorithmException, UnrecoverableKeyException
setKeyEntryを呼び出すか、あるいはPrivateKeyEntryまたはSecretKeyEntryを指定してsetEntryを呼び出すことでその別名に関連付けられている必要があります。alias - 別名password - 鍵を復元するためのパスワードKeyStoreException - キーストアが初期化(ロード)されていない場合。NoSuchAlgorithmException - 鍵を復元するためのアルゴリズムが見つからない場合。UnrecoverableKeyException - 指定されたパスワードが間違っている場合など、鍵を復元できない場合。public final Certificate[] getCertificateChain(String alias) throws KeyStoreException
setKeyEntryを呼び出すか、あるいはPrivateKeyEntryを指定してsetEntryを呼び出すことで別名に関連付けられている必要があります。alias - 別名KeyStoreException - キーストアが初期化(ロード)されていない場合。public final Certificate getCertificate(String alias) throws KeyStoreException
指定された別名によって識別されるエントリが、setCertificateEntryを呼び出して作成されたエントリ、あるいはTrustedCertificateEntryを指定してsetEntryを呼び出して作成されたエントリのいずれかである場合、そのエントリ内に格納されている信頼できる証明書が返されます。
指定された別名によって識別されるエントリが、setKeyEntryを呼び出して作成されたエントリ、あるいはPrivateKeyEntryを指定してsetEntryを呼び出して作成されたエントリのいずれかである場合、そのエントリ内の証明書チェーンの最初の要素が返されます。
alias - 別名KeyStoreException - キーストアが初期化(ロード)されていない場合。public final Date getCreationDate(String alias) throws KeyStoreException
alias - 別名KeyStoreException - キーストアが初期化(ロード)されていない場合。public final void setKeyEntry(String alias, Key key, char[] password, Certificate[] chain) throws KeyStoreException
指定された鍵がjava.security.PrivateKeyタイプである場合、その鍵には対応する公開鍵を証明する証明書チェーンが含まれていなければいけません。
指定された別名がすでに存在する場合は、それに関連したキーストア情報は、指定された鍵と証明書チェーンによってオーバーライドされます。
alias - 別名key - 別名に関連した鍵password - 鍵を保護するためのパスワードchain - 対応する公開鍵の証明書チェーン。指定された鍵がjava.security.PrivateKeyタイプである場合にだけ必要。KeyStoreException - キーストアが初期化(ロード)されていない場合、指定された鍵を保護できない場合、またはこの処理がなんらかの原因で失敗した場合public final void setKeyEntry(String alias, byte[] key, Certificate[] chain) throws KeyStoreException
保護された鍵がjava.security.PrivateKeyタイプである場合、その鍵には対応する公開鍵を証明する証明書チェーンが含まれていなければいけません。基本となるキーストアの実装のタイプがjksの場合、keyはPKCS#8標準の定義に従ってEncryptedPrivateKeyInfoとして符号化されている必要があります。
指定された別名がすでに存在する場合は、それに関連したキーストア情報は、指定された鍵と証明書チェーンによってオーバーライドされます。
alias - 別名key - 別名に関連した保護形式の鍵chain - 保護された鍵がjava.security.PrivateKeyタイプである場合にだけ有効な、対応する公開鍵の証明書チェーン。KeyStoreException - キーストアが初期化(ロード)されていない場合、またはこの処理がなんらかの原因で失敗した場合。public final void setCertificateEntry(String alias, Certificate cert) throws KeyStoreException
指定された別名によって識別されるエントリが、setCertificateEntryを呼び出して作成された既存エントリ、あるいはTrustedCertificateEntryを指定してsetEntryを呼び出して作成された既存エントリのいずれかである場合、その既存エントリ内に格納されている信頼できる証明書が、指定された証明書でオーバーライドされます。
alias - 別名cert - 証明書KeyStoreException - キーストアが初期化されていない場合、指定された別名がすでに存在していてもそれによって識別されるエントリが信頼できる証明書を含んでいない場合、またはこの処理がなんらかの原因で失敗した場合。public final void deleteEntry(String alias) throws KeyStoreException
alias - 別名KeyStoreException - キーストアが初期化されていない場合、またはエントリを削除できない場合。public final Enumeration<String> aliases() throws KeyStoreException
KeyStoreException - キーストアが初期化(ロード)されていない場合。public final boolean containsAlias(String alias) throws KeyStoreException
alias - 別名KeyStoreException - キーストアが初期化(ロード)されていない場合。public final int size()
throws KeyStoreException
KeyStoreException - キーストアが初期化(ロード)されていない場合。public final boolean isKeyEntry(String alias) throws KeyStoreException
setKeyEntryを呼び出して作成されたエントリ、あるいはPrivateKeyEntryまたはSecretKeyEntryを指定してsetEntryを呼び出して作成されたエントリのいずれかである場合、trueを返します。alias - 判定対象となるキーストア・エントリの別名KeyStoreException - キーストアが初期化(ロード)されていない場合。public final boolean isCertificateEntry(String alias) throws KeyStoreException
setCertificateEntryを呼び出して作成されたエントリ、あるいはTrustedCertificateEntryを指定してsetEntryを呼び出して作成されたエントリのいずれかである場合、trueを返します。alias - 判定対象となるキーストア・エントリの別名KeyStoreException - キーストアが初期化(ロード)されていない場合。public final String getCertificateAlias(Certificate cert) throws KeyStoreException
このメソッドは、指定された証明書を各キーストア・エントリと照合します。処理対象のエントリが、setCertificateEntryを呼び出して作成されたエントリ、あるいはTrustedCertificateEntryを指定してsetEntryを呼び出して作成されたエントリである場合、指定された証明書はそのエントリの証明書と比較されます。
処理対象のエントリが、setKeyEntryを呼び出して作成されたエントリ、あるいはPrivateKeyEntryを指定してsetEntryを呼び出して作成されたエントリである場合、指定された証明書はそのエントリの証明書チェーンの最初の要素と比較されます。
cert - 照合する証明書。KeyStoreException - キーストアが初期化(ロード)されていない場合。public final void store(OutputStream stream, char[] password) throws KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException
stream - このキーストアを書き込む出力ストリーム。password - キーストアの整合性を検査するためのパスワードKeyStoreException - キーストアが初期化(ロード)されていない場合。IOException - データに入出力の問題があった場合NoSuchAlgorithmException - 適切なデータ整合性アルゴリズムが見つからなかった場合CertificateException - キーストア・データに含まれるどの証明書も格納できなかった場合public final void store(KeyStore.LoadStoreParameter param) throws KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException
LoadStoreParameterを使用してこのキーストアを格納します。param - キーストアの格納方法を指定したLoadStoreParameter。nullも指定可能IllegalArgumentException - 指定されたLoadStoreParameter入力が認識されない場合KeyStoreException - キーストアが初期化(ロード)されていない場合IOException - データに入出力の問題があった場合NoSuchAlgorithmException - 適切なデータ整合性アルゴリズムが見つからなかった場合CertificateException - キーストア・データに含まれるどの証明書も格納できなかった場合public final void load(InputStream stream, char[] password) throws IOException, NoSuchAlgorithmException, CertificateException
パスワードを指定すると、キーストアがハードウェア・トークン・デバイス上に存在する場合などに、キーストアのロック解除やキーストア・データの整合性検査ができます。整合性検査用のパスワードが指定されなかった場合、整合性検査は実行されません。
空のキーストアを作成する場合、あるいはキーストアをストリームから初期化できない場合は、stream引数としてnullを渡します。
このキーストアがすでにロードされている場合、このキーストアは再び初期化され、指定されたストリームからロードし直されます。
stream - キーストアのロード元の入力ストリームまたはnullpassword - キーストアの整合性検査用パスワード、キーストアのロック解除用パスワード、またはnullIOException - キーストア・データで入出力または形式に関する問題が発生した場合、パスワードが必要であるのに指定されなかった場合、または指定されたパスワードが間違っている場合。パスワードが正しくなかったためにエラーが発生した場合、IOExceptionのcauseはUnrecoverableKeyExceptionNoSuchAlgorithmException - キーストアの整合性を検査するアルゴリズムが見つからなかった場合CertificateException - キーストアのどの証明書もロードできなかった場合public final void load(KeyStore.LoadStoreParameter param) throws IOException, NoSuchAlgorithmException, CertificateException
LoadStoreParameterを使用してこのキーストアをロードします。
このキーストアがすでにロードされている場合、このキーストアは再び初期化され、指定されたストリームからロードし直されます。
param - キーストアのロード方法を指定したLoadStoreParameter。nullも指定可能IllegalArgumentException - 指定されたLoadStoreParameter入力が認識されない場合IOException - キーストア・データに入出力または形式の問題があった場合。ProtectionParameterが正しくなかった(たとえばパスワードが正しくなかった)ためにエラーが発生した場合、IOExceptionのcauseはUnrecoverableKeyExceptionNoSuchAlgorithmException - キーストアの整合性を検査するアルゴリズムが見つからなかった場合CertificateException - キーストアのどの証明書もロードできなかった場合public final KeyStore.Entry getEntry(String alias, KeyStore.ProtectionParameter protParam) throws NoSuchAlgorithmException, UnrecoverableEntryException, KeyStoreException
Entryを取得します。alias - この別名に対するキーストアEntryを取得protParam - Entryの保護に使用されるProtectionParameter。nullも指定可能Entry。そのようなエントリが存在しない場合はnullNullPointerException - aliasがnullである場合NoSuchAlgorithmException - エントリを復元するためのアルゴリズムが見つからない場合UnrecoverableEntryException - 指定されたprotParamが不十分または無効である場合UnrecoverableKeyException - エントリがPrivateKeyEntryまたはSecretKeyEntryで、指定されたprotParamに鍵の復元に必要な情報が含まれていない場合(たとえばパスワードが誤っている場合)KeyStoreException - キーストアが初期化(ロード)されていない場合。setEntry(String, KeyStore.Entry, KeyStore.ProtectionParameter)public final void setEntry(String alias, KeyStore.Entry entry, KeyStore.ProtectionParameter protParam) throws KeyStoreException
Entryを指定された別名で保存します。保護パラメータは、Entryを保護するために使用されます。
指定された別名のエントリがすでに存在する場合、そのエントリはオーバーライドされます。
alias - この別名でキーストアEntryを保存entry - 保存するEntryprotParam - Entryの保護に使用されるProtectionParameter。nullも指定可能NullPointerException - aliasまたはentryがnullの場合KeyStoreException - キーストアが初期化(ロード)されていない場合、またはこの処理がなんらかの原因で失敗した場合getEntry(String, KeyStore.ProtectionParameter)public final boolean entryInstanceOf(String alias, Class<? extends KeyStore.Entry> entryClass) throws KeyStoreException
aliasのキーストアEntryが、指定されたentryClassのインスタンスまたはサブクラスであるかどうかを判定します。alias - 別名entryClass - エントリ・クラスaliasのキーストアEntryが、指定されたentryClassのインスタンスまたはサブクラスである場合はtrue、そうでない場合はfalseNullPointerException - aliasまたはentryClassがnullの場合KeyStoreException - キーストアが初期化(ロード)されていない場合 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.