javatm platform
standard ed. 6

java.security
类 keystore

java.lang.object 继承者 java.security.keystore

public class keystore
extends object

此类表示密钥和证书的存储设施。

keystore 管理(guǎn lǐ)不同类型的条目。每种类型的条目都实现 keystore.entry 接口。提供了三种基本的 keystore.entry 实现:

keystore 中的每一条目都用 “alias” 字符串标识。对于私钥及其关联的证书链,这些字符串用于区分实体验证自身可以采用的不同方式。例如,实体可以使用不同的证书授权或不同的公钥算法来验证自身。

别名是否区分大小写与实现有关。为了避免出现(chū xiàn)问题(wèn tí),建议不要(bù yào)在 keystore 中使用只有大小写区别的别名。

在这里没有指定 keystore 是否是持久性的,也没有指定 keystore 是持久性时所使用的机制。这允许(yǔn xǔ)使用各种技术保护敏感(sense)的(例如,私有的或秘密的)密钥。一种选择是使用智能卡或其他(qí tā)集成加密引擎 (safekeyper),也可以(以各种格式)使用文件之类更为简单的机制。

请求 keystore 对象的典型方式包括(included)使用默认类型和提供一个特定的 keystore 类型。

必须先加载 keystore 才能对其进行访问。

  keystore ks=keystore.getinstance(keystore.getdefaulttype());  // get user password and file input stream  char[] password=getpassword();  java.io.fileinputstream fis=null;  try {  fis=new java.io.fileinputstream("keystorename");  ks.load(fis, password);  } finally {  if (fis !=null) {  fis.close();  }  } 
要使用上述 load 方法创建一个空 keystore,传递 null 作为 inputstream 的参数。

一旦加载了 keystore,就能够从 keystore 读取现有条目,或向 keystore 写入新条目:

  // get my private key  keystore.privatekeyentry pkentry=(keystore.privatekeyentry)  ks.getentry("privatekeyalias", password);  privatekey myprivatekey=pkentry.getprivatekey();  // save my secret key  javax.crypto.secretkey mysecretkey;  keystore.secretkeyentry skentry=  new keystore.secretkeyentry(mysecretkey);  ks.setentry("secretkeyalias", skentry,   new keystore.passwordprotection(password));  // store away the keystore  java.io.fileoutputstream fos=null;  try {  fos=new java.io.fileoutputstream("newkeystorename");  ks.store(fos, password);  } finally {  if (fos !=null) {  fos.close();  }  } 
注意(危险信号),可以使用相同的密码加载 keystore、保护私钥条目、保护秘密密钥条目以及存储 keystore(如上文示例代码所示),也可以使用不同的密码或其他保护参数。

从以下版本开始(appeared):
1.2
另请参见:
privatekey,secretkey,certificate

嵌套类摘要
static classkeystore.builder
          将被实例化的 keystore 对象的描述。
static classkeystore.callbackhandlerprotection
          封装 callbackhandler 的 protectionparameter。
static interfacekeystore.entry
          用于 keystore 项类型的标记接口。
static interfacekeystore.loadstoreparameter
          用于 keystore loadstore 参数的标记接口。
static classkeystore.passwordprotection
          protectionparameter 的一个基于密码的实现。
static classkeystore.privatekeyentry
          保存 privatekey 和相应证书链的 keystore 项。
static interfacekeystore.protectionparameter
          用于 keystore 保护参数的标记接口。
static classkeystore.secretkeyentry
          保存 secretkeykeystore 项。
static classkeystore.trustedcertificateentry
          保存可信的 certificatekeystore 项。
 
构造方法摘要
protected keystore(keystorespi keystorespi,provider provider,string type)
          创建给定类型的 keystore 对象,并在其中封装给定的提供者实现(spi 对象)。
 
方法摘要
 enumeration<string>aliases()
          列出此 keystore 的所有别名。
 booleancontainsalias(string alias)
          检查给定别名是否存在于此 keystore 中。
 voiddeleteentry(string alias)
          删除此 keystore 中给定别名标识的条目。
 booleanentryinstanceof(string alias,class<? extends keystore.entry> entryclass)
          确定指定 alias 的 keystore entry 是否是指定 entryclass 的实例或子类。
 certificategetcertificate(string alias)
          返回与给定别名关联的证书。
 stringgetcertificatealias(certificate cert)
          返回证书与给定证书匹配的第一个 keystore 条目的别名。
 certificate[]getcertificatechain(string alias)
          返回与给定别名关联的证书链。
 dategetcreationdatejs随机数(string alias)
          返回给定别名标识的条目的创建日期。
static stringgetdefaulttype()
          返回 java 安全(safest)属性文件中指定的默认 keystore 类型;如果不存在此类属性,则返回字符串 "jks"("java keystore" 的首字母缩写)。
 keystore.entrygetentry(string alias,keystore.protectionparameter protparam)
          使用指定保护参数获取指定别名的 keystore entry
static keystoregetinstance(string type)
          返回指定类型的 keystore 对象。
static keystoregetinstance(string type,provider provider)
          返回指定类型的 keystore 对象。
static keystoregetinstance(string type,string provider)
          返回指定类型的 keystore 对象。
 keygetkey(string alias,char[] password)
          返回与给定别名关联的密钥,并用给定密码来恢复它。
 providergetprovider()
          返回此 keystore 的提供者。
 stringgettype()
          返回此 keystore 的类型。
 booleaniscertificateentry(string alias)
          如果给定别名标识的条目是通过调用 setcertificateentry 或者以 trustedcertificateentry 为参数的 setentry 创建的,则返回 true。
 booleaniskeyentry(string alias)
          如果给定别名标识的条目是通过调用 setkeyentry 或者以 privatekeyentrysecretkeyentry 为参数的 setentry 创建的,则返回 true。
 voidload(inputstream stream,char[] password)
          从给定输入流中加载此 keystore。
 voidload(keystore.loadstoreparameter param)
          使用给定 loadstoreparameter 加载此 keystore。
 voidsetcertificateentry(string alias,certificate cert)
          将给定可信证书分配给给定别名。
 voidsetentry(string alias,keystore.entry entry,keystore.protectionparameter protparam)
          用指定别名保存 keystore entry
 voidsetkeyentry(string alias,byte[] key,certificate[] chain)
          将给定密钥(已经(yǐ jing)被保护)分配给给定别名。
 voidsetkeyentry(string alias,key key,char[] password,certificate[] chain)
          将给定的密钥分配给给定的别名,并用给定密码保护它。
 intsize()
          获取此 keystore 中条目数。
 voidstore(keystore.loadstoreparameter param)
          使用给定 loadstoreparameter 存储此 keystore。
 voidstore(outputstream stream,char[] password)
          将此 keystore 存储到给定输出流,并用给定密码保护其完整性。
 
从类 java.lang.object 继承的方法
clone, equals, finalize, getclass, hashcode, notify, notifyall, tostring, wait, wait, wait
 

构造方法详细信息

keystore

protected keystore(keystorespi keystorespi,    provider provider,    string type)
创建给定类型的 keystore 对象,并在其中封装给定的提供者实现(spi 对象)。

参数:
keystorespi - 提供者实现
provider - 提供者
type - keystore 类型。
方法详细信息

getinstance

public static keystore getinstance(string type)      throws keystoreexception
返回指定类型的 keystore 对象。

此方法从首选 provider 开始(appeared)遍历已注册安全(safest)提供者列表。返回一个封装 keystorespi 实现的新 keystore 对象,该实现取自第一个支持(support)指定类型的 provider。

注意(危险信号),可以通过 security.getproviders() 方法获取已注册提供者列表。

参数:
type - keystore 类型。有关标准 keystore 类型的信息,请参阅 java cryptography architecture api specification & reference 中的附录 a。
返回:
指定类型的 keystore 对象。
抛出:
keystoreexception - 如果没有 provider 支持(support)指定类型的 keystorespi 实现。
另请参见:
provider

getinstance

public static keystore getinstance(string type,      string provider)      throws keystoreexception,      nosuchproviderexception
返回指定类型的 keystore 对象。

返回一个封装 keystorespi 实现的新 keystore 对象,该实现取自指定提供者。指定提供者必须在安全提供者列表中注册。

注意,可以通过 security.getproviders() 方法获取已注册提供者列表。

参数:
type - keystore 类型。有关标准 keystore 类型的信息,请参阅 java cryptography architecture api specification & reference 中的附录 a。
provider - 提供者的名称。
返回:
指定类型的 keystore 对象。
抛出:
keystoreexception - 如果不能从指定提供者获得指定类型的 keystorespi 实现。
nosuchproviderexception - 如果指定提供者未在安全提供者列表中注册。
illegalargumentexception - 如果提供者的名称为 null 或空。
另请参见:
provider

getinstance

public static keystore getinstance(string type,      provider provider)      throws keystoreexception
返回指定类型的 keystore 对象。

返回一个封装 keystorespi 实现的新 keystore 对象,该实现取自指定 provider 对象。注意,指定 provider 对象无需在提供者列表中注册。

参数:
type
司法部对这宗案件回应说,案中受害人勇敢出来指证,调查人员锲而不?蔚淖凡檎嫦唷⒁约凹觳觳棵畔戮鲂拇蚧髯镄校?际侵匾?模?钪粘晒(chéng gōng)把蹂躏?童的性罪犯绳之于法
长期以来以民主的典、自由的灯塔、梦想的乐土自居的美国,其政治领袖、官员、名人们向来都是见人说
联合国难民署指出,截至2月29日晚间,希腊境内需要一个栖身之处的移民估计就有2万4000人
美国哈佛大学法学院4日宣布,决定停用已沿用79年的盾形校徽;原因是院徽标?I和奴隶制有关联,引发种族歧视的争议,许多(many)院内学生(xué sheng)发起换院徽活动表示不满,而院方事后针对此事成立(chéng lì)一个12人委员会,成员是院内师生和校友,在开会审查后,以10比2的票(ticket)数建议撤换官方校徽
据说虾类等软壳类含有大量浓度(attitudes)较高的五钾砷化合物,在大剂量服用维生素C之后,五钾砷转变为有毒的三钾砷,这就是人们俗称的砒霜
- keystore 类型。有关标准 keystore 类型的信息,请参阅 java cryptography architecture api specification & reference 中的附录 a。
provider - 提供者。
返回:
指定类型的 keystore 对象。
抛出:
keystoreexception - 如果不能从指定 provider 对象获得指定类型的 keystorespi 实现。
illegalargumentexception - 如果指定提供者为 null。
从以下版本开始:
1.4
另请参见:
provider

getdefaulttype

public static final string getdefaulttype()
返回 java 安全属性文件中指定的默认 keystore 类型;如果不存在此类属性,则返回字符串 "jks"("java keystore" 的首字母缩写)。java 安全属性文件位于名为 <java_home>/lib/security/java.security 的文件中。<java_home> 引用 java.home 系统属性的值,并指定安装 jre 的目录。

调用某个 getinstance 方法时不希望(hope)使用固定编码 (hard coded) keystore 类型的应用程序,以及用户未指定 keystore 类型时希望(hope)提供默认 keystore 类型的应用程序可以使用默认的 keystore 类型。

通过将 "keystore.type" 安全属性(在 java 安全属性文件中)的值设置为所需的 keystore 类型,可以更改默认的 keystore 类型。

返回:
java 安全属性文件中指定的默认 keystore 类型;如果不存在此类属性,则返回字符串 "jks"。

getprovider

public final provider getprovider()
返回此 keystore 的提供者。

返回:
此 keystore 的提供者。

gettype

public final string gettype()
返回此 keystore 的类型。

返回:
此 keystore 的类型。

getkey

public final key getkey(string alias,    char[] password)   throws keystoreexception,    nosuchalgorithmexception,    unrecoverablekeyexception
返回与给定别名关联的密钥,并用给定密码来恢复它。必须已经(yǐ jing)通过调用 setkeyentry,或者以 privatekeyentrysecretkeyentry 为参数的 setentry 关联密钥与别名。

参数:
alias - 别名
password - 用于恢复密钥的密码
返回:
请求的密钥;如果给定别名不存在或不标识与密钥相关的条目,则返回 null。
抛出:
keystoreexception - 如果 keystore 尚未被初始化(加载)。
nosuchalgorithmexception - 如果不能找到恢复密钥的算法
unrecoverablekeyexception - 如果不能恢复密钥(例如,给定密码错误)。

getcertificatechain

public final certificate[] getcertificatechain(string alias)        throws keystoreexception
返回与给定别名关联的证书链。必须已经通过调用 setkeyentry,或者以 privatekeyentry 为参数的 setentry 关联证书链与别名。

参数:
alias - 别名
返回:
证书链(按用户证书在前,根证书授权在后的顺序);如果给定别名不存在或不包含证书链,则返回 null
抛出:
keystoreexception - 如果 keystore 尚未被初始化(加载)。

getcertificate

public final certificate getcertificate(string alias)       throws keystoreexception
返回与给定别名关联的证书。

如果给定的别名标识通过调用 setcertificateentry 创建的条目,或者通过调用以 trustedcertificateentry 为参数的 setentry 创建的条目,则返回包含在该条目中的可信证书。

如果给定的别名标识通过调用 setkeyentry 创建的条目,或者通过调用以 privatekeyentry 为参数的 setentry 创建的条目,则返回该条目中证书链的第一个元素。

参数:
alias - 别名
返回:
证书;如果给定别名不存在或不包含证书,则返回 null。
抛出:
keystoreexception - 如果 keystore 尚未被初始化(加载)。

getcreationdate

public final date getcreationdate(string alias)      throws keystoreexception
返回给定别名标识的条目的创建日期。

参数:
alias - 别名
返回:
此条目的创建日期;如果给定的别名不存在,则返回 null
抛出:
keystoreexception - 如果 keystore 尚未被初始化(加载)。

setkeyentry

public final void setkeyentry(string alias,     key key,     char[] password,     certificate[] chain)    throws keystoreexception
将给定的密钥分配给给定的别名,并用给定密码保护它。

如果给定密钥的类型为 java.security.privatekey,则它必须附带证明(zhèng míng)相应公钥的证书链。

如果给定别名已经存在,则与别名关联的 keystore 信息将被给定密钥(还可能(kě néng)包括证书链)重写。

参数:
alias - 别名
key - 要与别名关联的密钥
password - 保护密钥的密码
chain - 相应公钥的证书链(只在给定密钥的类型为 java.security.privatekey 时需要)。
抛出:
keystoreexception - 如果 keystore 尚未被初始化(加载)、无法(to be)保护给定的密钥,或者此操作由于(Meanwhile)某些其他原因而失败

setkeyentry

public final void setkeyentry(string alias,     byte[] key,     certificate[] chain)    throws keystoreexception
将给定密钥(已经被保护)分配给给定别名。

如果受保护密钥的类型为 java.security.privatekey,则它必须附带证明(zhèng míng)相应公钥的证书链。如果底层 keystore 实现的类型为 jks,则必须根据 pkcs #8 标准中的定义将 key 编码为 encryptedprivatekeyinfo

如果给定别名已经存在,则与别名关联的 keystore 信息将被给定密钥(还可能(kě néng)包括证书链)重写。

参数:
alias - 别名
key - 要与别名关联的密钥(以受保护格式)
chain - 相应公钥的证书链(只在受保护密钥的类型为 java.security.privatekey 时有用)。
抛出:
keystoreexception - 如果 keystore 尚未被初始化(加载),或者此操作由于(Meanwhile)某些其他原因而失败。

setcertificateentry

public final void setcertificateentry(string alias,       certificate cert)      throws keystoreexception
将给定可信证书分配给给定别名。

如果给定别名标识通过调用 setcertificateentry 创建的现有条目,或者通过调用以 trustedcertificateentry 为参数的 setentry 创建的现有条目,则现有条目中的可信证书将被给定证书重写。

参数:
alias - 别名
cert - 证书
抛出:
keystoreexception - 如果 keystore 尚未被初始化,或者给定别名已存在但不标识包含可信证书的条目,或者此操作由于其他某些原因失败。

deleteentry

public final void deleteentry(string alias)    throws keystoreexception
删除此 keystore 中给定别名标识的条目。

参数:
alias - 别名
抛出:
keystoreexception - 如果 keystore 尚未被初始化,或者条目不能被移除。

aliases

public final enumeration<string> aliases()       throws keystoreexception
列出此 keystore 的所有别名。

返回:
别名的枚举
抛出:
keystoreexception - 如果 keystore 尚未被初始化(加载)。

containsalias

public final boolean containsalias(string alias)      throws keystoreexception
检查给定别名是否存在于此 keystore 中。

参数:
alias - 别名
返回:
如果别名存在,则返回 true;否则返回 false
抛出:
keystoreexception - 如果 keystore 尚未被初始化(加载)。

size

public final int size()    throws keystoreexception
获取此 keystore 中条目数。

返回:
此 keystore 中的条目数
抛出:
keystoreexception - 如果 keystore 尚未被初始化(加载)。

iskeyentry

public final boolean iskeyentry(string alias)     throws keystoreexception
如果给定别名标识的条目是通过调用 setkeyentry 或者以 privatekeyentrysecretkeyentry 为参数的 setentry 创建的,则返回 true。

参数:
alias - 要检查的 keystore 条目的别名
返回:
如果给定别名标识的条目是与密钥相关的条目,则返回 true;否则返回 false。
抛出:
keystoreexception - 如果 keystore 尚未被初始化(加载)。

iscertificateentry

public final boolean iscertificateentry(string alias)       throws keystoreexception
如果给定别名标识的条目是通过调用 setcertificateentry 或者以 trustedcertificateentry 为参数的 setentry 创建的,则返回 true。

参数:
alias - 要检查的 keystore 条目的别名
返回:
如果给定别名标识的条目包含一个可信证书,则返回 true;否则返回 false。
抛出:
keystoreexception - 如果 keystore 尚未被初始化(加载)。

getcertificatealias

public final string getcertificatealias(certificate cert)       throws keystoreexception
返回证书与给定证书匹配的第一个 keystore 条目的别名。

此方法尝试将给定证书与每一个 keystore 条目匹配。如果认为条目是通过调用 setcertificateentry 或者以 trustedcertificateentry 为参数的 setentry 创建的,则将给定证书与该条目的证书进行比较。

如果认为条目是通过调用 setkeyentry 或者以 privatekeyentry 为参数的 setentry 创建的,则将给定证书与该条目证书链的第一个元素进行比较。

参数:
cert - 要匹配的证书
返回:
带有匹配证书的第一个条目的别名;如果此 keystore 中不存在这种条目,则返回 null。
抛出:
keystoreexception - 如果 keystore 尚未被初始化(加载)。

store

public final void store(outputstreamjs随机数 stream,    char[] password)   throws keystoreexception,    ioexception,    nosuchalgorithmexception,    certificateexception
将此 keystore 存储到给定输出流,并用给定密码保护其完整性。

参数:
stream - 要写入此 keystore 的输出流。
password - 生成 keystore 完整性检验的密码
抛出:
keystoreexception - 如果 keystore 尚未被初始化(加载)。
ioexception - 如果存在数据 i/o 问题(wèn tí)
nosuchalgorithmexception - 如果不存在恰当的数据完整性算法
certificateexception - 如果 keystore 数据中包含无法(to be)存储的证书

store

public final void store(keystore.loadstoreparameter param)   throws keystoreexception,    ioexception,    nosuchalgorithmexception,    certificateexception
使用给定 loadstoreparameter 存储此 keystore。

参数:
param - 指定如何(rú hé)存储 keystore 的 loadstoreparameter,该参数可以为 null
抛出:
illegalargumentexception - 如果无法识别给定的 loadstoreparameter 输入
keystoreexception - 如果 keystore 尚未被初始化(加载)
ioexception - 如果存在数据 i/o 问题
nosuchalgorithmexception - 如果不存在恰当的数据完整性算法
certificateexception - 如果 keystore 数据中包含无法存储的证书
从以下版本开始:
1.5

load

public final void load(inputstream stream,    char[] password)    throws ioexception,    nosuchalgorithmexception,    certificateexception
从给定输入流中加载此 keystore。

可以给定一个密码来解锁 keystore(例如,驻留在硬件标记设备上的 keystore)或检验 keystore 数据的完整性。如果没有指定用于完整性检验的密码,则不会执行完整性检验。

如果要创建空 keystore,或者不能从流中初始化 keystore,则传递 null网站地图 手机端 作为 stream 的参数。

注意,如果此 keystore 已经被加载,那么它将被重新初始化,并再次从给定输入流中加载。

参数:
stream - 从中加载 keystore 的输入流,或者 null
password - 用来检验 keystore 完整性的密码,用来解锁 keystore 的密码,或者 null
抛出:
ioexception - 如果存在 keystore 数据 i/o 问题或格式问题,如果需要密码却没有指定,或者指定的密码错误。如果错误是由于密码错误引起的,那么 ioexceptioncause 应该(yīng gāi)是 unrecoverablekeyexception
nosuchalgorithmexception - 如果不存在用来检验 keystore 完整性的算法
certificateexception - 如果不能加载 keystore 中的任何证书

load

public final void load(keystore.loadstoreparameter param)    throws ioexception,    nosuchalgorithmexception,    certificateexception
使用给定 loadstoreparameter 加载此 keystore。

注意,如果此 keystore 已经被加载,那么它将被重新初始化,并再次从给定参数加载。

参数:
param - 指定如何(rú hé)加载 keystore 的 loadstoreparameter,可以为 null
抛出:
illegalargumentexception - 如果无法识别给定 loadstoreparameter 输入
ioexception - 如果存在 keystore 数据 i/o 问题或格式问题。如果错误是由于 protectionparameter 不正确(如密码错误)引起的,那么 ioexceptioncause 应该(yīng gāi)是 unrecoverablekeyexception
nosuchalgorithmexception - 如果不存在用来检验 keystore 完整性的算法
certificateexception - 如果不能加载 keystore 中的任何证书
从以下版本开始:
1.5

getentry

public final keystore.entry getentry(string alias,       keystore.protectionparameter protparam)     throws nosuchalgorithmexception,       unrecoverableentryexception,       keystoreexception
使用指定保护参数获取指定别名的 keystore entry

参数:
alias - 获取此别名的 keystore entry
protparam - 用来保护 entryprotectionparameter,可以为 null
返回:
指定别名的 keystore entry;如果不存在这种条目,则返回 null
抛出:
nullpointerexception - 如果 aliasnull
nosuchalgorithmexception - 如果不存在用来恢复条目的算法
unrecoverableentryexception - 如果指定的 protparam 不足或无效
unrecoverablekeyexception - 如果该条目是 privatekeyentrysecretkeyentry,并且指定的 protparam 不包含恢复密钥所需的信息(如密码错误)
keystoreexception - 如果 keystore 尚未被初始化(加载)
从以下版本开始:
1.5
另请参见:
setentry(string, keystore.entry, keystore.protectionparameter)

setentry

public final void setentry(string alias,      keystore.entry entry,      keystore.protectionparameter protparam)    throws keystoreexception
用指定别名保存 keystore entry。保护参数用来保护 entry

如果指定别名的条目已经存在,它将被重写。

参数:
alias - 以此别名保存 keystore entry
entry - 要保存的 entry
protparam - 用来保护 entryprotectionparameter,可以为 null
抛出:
nullpointerexception - 如果 aliasentrynull
keystoreexception - 如果 keystore 尚未被初始化(加载),或者此操作由于其他原因失败
从以下版本开始:
1.5
另请参见:
getentry(string, keystore.protectionparameter)

entryinstanceof

public final boolean entryinstanceof(string alias,       class<? extends keystore.entry> entryclass)     throws keystoreexception
确定指定 alias 的 keystore entry 是否是指定 entryclass 的实例或子类。

参数:
alias - 别名
entryclass - 条目的类
返回:
true 如果指定 alias 的 keystore entry 是指定 entryclass 的实例或子类,则返回 true;否则返回 false。
抛出:
nullpointerexception - 如果 aliasentryclassnull
keystoreexception - 如果 keystore 尚未被初始化(加载)
从以下版本开始:
1.5

javatm platform
standard ed. 6

提交错误或意见(yì jian)
有关更多的 api 参考资料和开发(developing)人员文档,请参阅 java se 开发(developing)人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作(work)代码示例。

版权所有 2007 sun microsystems, inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策