KeyStore 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
此类表示加密密钥和证书的存储设施。
[Android.Runtime.Register("java/security/KeyStore", DoNotGenerateAcw=true)]
public class KeyStore : Java.Lang.Object
[<Android.Runtime.Register("java/security/KeyStore", DoNotGenerateAcw=true)>]
type KeyStore = class
inherit Object
- 继承
- 属性
注解
此类表示加密密钥和证书的存储设施。
管理 KeyStore
不同类型的条目。 每种类型的条目都 KeyStore.Entry
实现 接口。 提供了三种基本 KeyStore.Entry
实现:
<ul><li><b>KeyStore.PrivateKeyEntry</b>
这种类型的条目包含加密 PrivateKey
,该加密可选择性地以受保护的格式存储,以防止未经授权的访问。 它还附带相应的公钥的证书链。
私钥和证书链由给定实体用于自我身份验证。 此身份验证的应用程序包括软件分发组织,这些组织在发布和/或许可软件过程中对 JAR 文件进行签名。
<li><b>KeyStore.SecretKeyEntry</b>
这种类型的条目包含加密 SecretKey
,该加密可选择性地以受保护的格式存储,以防止未经授权的访问。
<li><b>KeyStore.TrustedCertificateEntry</b>
这种类型的条目包含属于另一方的单个公钥 Certificate
。 它被称为 受信任的证书 ,因为密钥存储所有者信任证书中的公钥确实属于证书 的使用者 (所有者) 标识的标识。
这种类型的条目可用于对其他参与方进行身份验证。 </ul>
密钥存储中的每个条目都由一个“别名”字符串标识。 对于私钥及其关联的证书链,这些字符串区分实体对自身进行身份验证的不同方式。 例如,实体可能使用不同的证书颁发机构或使用不同的公钥算法对自身进行身份验证。
别名是否区分大小写取决于实现。 为了避免出现问题,建议不要在 KeyStore 中使用仅在大小写上不同的别名。
此处未指定密钥存储是否是永久性的,以及密钥存储使用的机制(如果它是永久性的)。 这允许使用各种技术来保护敏感 (例如,私有或机密) 密钥。 智能卡或其他集成加密引擎 (SafeKeyper) 是一个选项,更简单的机制(如文件)也可用于 (各种格式) 。
请求 KeyStore 对象的典型方式包括指定现有的密钥存储文件、依赖于默认类型并提供特定的密钥存储类型。
<ul><li>若要指定现有密钥存储文件::
// get keystore password
char[] password = getPassword();
// probe the keystore file and load the keystore entries
KeyStore ks = KeyStore.getInstance(new File("keyStoreName"), password);
系统将探测指定的文件以确定其密钥存储类型,并返回已加载其条目的密钥存储实现。 使用此方法时,无需调用密钥存储的 #load(java.io.InputStream, char[]) load
方法。
<li>依赖于默认类型:
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
系统将返回默认类型的密钥存储实现。
<li>若要提供特定的密钥存储类型,请执行以下操作:
KeyStore ks = KeyStore.getInstance("JKS");
系统将返回环境中可用的指定密钥存储类型的最首选实现。 </ul>
在访问密钥存储之前,它必须是 #load(java.io.InputStream, char[]) 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);
}
请注意,尽管可以使用相同的密码来加载密钥存储、保护私钥条目、保护密钥条目以及存储密钥存储 (,如上面的示例代码所示) ,也可以使用不同的密码或其他保护参数。
Android 提供以下KeyStore
类型:<table<>thead><tr><th>Algorithm</th>><Supported API Levels</th></tr<>/thead<>tbody<>tr<>td>AndroidCAStore</td><td>14+</td<>/tr><><td>AndroidKeyStore</td><td>18+</td<>/tr><tr class=“deprecated”><td>BCPKCS12</td><td>1-8</td<>/tr<>><td>BKS</td<>td>1+</td></tr<>><td>BouncyCastle</td><td>1+</td></tr><><td>PKCS12</td<>td>1+</td></tr<>tr class=“deprecated”><td>PKCS12-DEF</td><td>1-8</td></tr></tbody></table>
Java 加密体系结构标准算法名称文档的 KeyStore 部分 介绍了这些类型。
在 1.2 中添加。
的 java.security.KeyStore
Java 文档。
此页面的某些部分是基于 创建和共享的工作进行的修改,并根据 署名许可中所述的条款使用。
构造函数
KeyStore(IntPtr, JniHandleOwnership) |
创建 JNI 对象的托管表示形式时使用的构造函数;由运行时调用。 |
KeyStore(KeyStoreSpi, Provider, String) |
创建给定类型的 KeyStore 对象,并将给定提供程序实现封装 (SPI 对象) 。 |
属性
Class |
返回此 |
DefaultType |
返回由安全属性指定的 |
Handle |
基础 Android 实例的句柄。 (继承自 Object) |
JniIdentityHashCode |
此类表示加密密钥和证书的存储设施。 (继承自 Object) |
JniPeerMembers |
此类表示加密密钥和证书的存储设施。 |
PeerReference |
此类表示加密密钥和证书的存储设施。 (继承自 Object) |
Provider |
返回此密钥存储的提供程序。 |
ThresholdClass |
此 API 支持 Mono for Android 基础结构,不应直接从代码中使用。 |
ThresholdType |
此 API 支持 Mono for Android 基础结构,不应直接从代码中使用。 |
Type |
返回此密钥存储的类型。 |
方法
Aliases() |
列出此密钥存储的所有别名。 |
Clone() |
创建并返回此对象的副本。 (继承自 Object) |
ContainsAlias(String) |
检查此密钥存储中是否存在给定的别名。 |
DeleteEntry(String) |
从此密钥存储中删除由给定别名标识的条目。 |
Dispose() |
此类表示加密密钥和证书的存储设施。 (继承自 Object) |
Dispose(Boolean) |
此类表示加密密钥和证书的存储设施。 (继承自 Object) |
EntryInstanceOf(String, Class) |
确定指定 |
Equals(Object) |
指示某个其他对象是否“等于”此对象。 (继承自 Object) |
GetCertificate(String) |
返回与给定别名关联的证书。 |
GetCertificateAlias(Certificate) |
返回 (别名) 其证书与给定证书匹配的第一个密钥存储条目的名称。 |
GetCertificateChain(String) |
返回与给定别名关联的证书链。 |
GetCreationDate(String) |
返回由给定别名标识的条目的创建日期。 |
GetEntry(String, KeyStore+IProtectionParameter) |
获取具有指定保护参数的指定别名的密钥存储 |
GetHashCode() |
返回对象的哈希代码值。 (继承自 Object) |
GetInstance(File, Char[]) |
返回适当密钥存储类型的已加载密钥存储对象。 |
GetInstance(File, KeyStore+ILoadStoreParameter) |
此类表示加密密钥和证书的存储设施。 |
GetInstance(String) |
返回指定类型的密钥存储对象。 |
GetInstance(String, Provider) |
返回指定类型的密钥存储对象。 |
GetInstance(String, String) |
返回指定类型的密钥存储对象。 |
GetKey(String, Char[]) |
返回与给定别名关联的密钥,并使用给定的密码进行恢复。 |
IsCertificateEntry(String) |
如果给定别名标识的条目是通过调用 |
IsKeyEntry(String) |
如果给定别名标识的条目是通过调用 |
JavaFinalize() |
当垃圾回收确定不再引用对象时,由垃圾回收器对对象调用。 (继承自 Object) |
Load(KeyStore+ILoadStoreParameter) |
从给定的输入流加载此 KeyStore。 |
Load(Stream, Char[]) |
从给定的输入流加载此 KeyStore。 |
Notify() |
唤醒正在等待此对象的监视器的单个线程。 (继承自 Object) |
NotifyAll() |
唤醒正在等待此对象的监视器的所有线程。 (继承自 Object) |
SetCertificateEntry(String, Certificate) |
将给定的受信任证书分配给给定的别名。 |
SetEntry(String, KeyStore+IEntry, KeyStore+IProtectionParameter) |
将密钥存储 |
SetHandle(IntPtr, JniHandleOwnership) |
设置 Handle 属性。 (继承自 Object) |
SetKeyEntry(String, Byte[], Certificate[]) |
将已) 保护的给定密钥 (分配给给定别名。 |
SetKeyEntry(String, IKey, Char[], Certificate[]) |
将给定密钥分配给给定的别名,并使用给定的密码对其进行保护。 |
Size() |
检索此密钥存储中的条目数。 |
Store(KeyStore+ILoadStoreParameter) |
将此密钥存储存储到给定的输出流,并使用给定的密码保护其完整性。 |
Store(Stream, Char[]) |
将此密钥存储存储到给定的输出流,并使用给定的密码保护其完整性。 |
ToArray<T>() |
此类表示加密密钥和证书的存储设施。 (继承自 Object) |
ToString() |
返回对象的字符串表示形式。 (继承自 Object) |
UnregisterFromRuntime() |
此类表示加密密钥和证书的存储设施。 (继承自 Object) |
Wait() |
导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>。<> (继承自 Object) |
Wait(Int64) |
导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>,或直到经过一定数量的实时。<> (继承自 Object) |
Wait(Int64, Int32) |
导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>,或直到经过一定数量的实时。<> (继承自 Object) |
显式接口实现
IJavaPeerable.Disposed() |
此类表示加密密钥和证书的存储设施。 (继承自 Object) |
IJavaPeerable.DisposeUnlessReferenced() |
此类表示加密密钥和证书的存储设施。 (继承自 Object) |
IJavaPeerable.Finalized() |
此类表示加密密钥和证书的存储设施。 (继承自 Object) |
IJavaPeerable.JniManagedPeerState |
此类表示加密密钥和证书的存储设施。 (继承自 Object) |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
此类表示加密密钥和证书的存储设施。 (继承自 Object) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
此类表示加密密钥和证书的存储设施。 (继承自 Object) |
IJavaPeerable.SetPeerReference(JniObjectReference) |
此类表示加密密钥和证书的存储设施。 (继承自 Object) |
扩展方法
JavaCast<TResult>(IJavaObject) |
执行 Android 运行时检查的类型转换。 |
JavaCast<TResult>(IJavaObject) |
此类表示加密密钥和证书的存储设施。 |
GetJniTypeName(IJavaPeerable) |
此类表示加密密钥和证书的存储设施。 |