KeyStore 类

定义

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

[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 不同类型的条目。 每种类型的条目实现 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>

密钥存储中的每个条目都由“alias”字符串标识。 对于私钥及其关联的证书链,这些字符串区分实体可能自行进行身份验证的不同方式。 例如,实体可以使用不同的证书颁发机构或使用不同的公钥算法对自身进行身份验证。

别名是否区分大小写取决于实现。 为了避免问题,建议不要在 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类型:<表<>thead<>tr<>th>Algorithm</th th Supported API Levels</><>th></tr></thead><tbody>><<td>AndroidCAStore/td td>14+/td>><</<<>>tr tr td>AndroidKeyStore<<></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 td>1+</<>td/<>><tr td>PKCS12</td><td td>1+</td></tr<>tr class=“deprecated”><td>PKCS12-DEF</td><td>1-8</td></tr></tbody></table>

Java加密体系结构标准算法名称文档的 KeyStore 部分介绍了这些类型。

已在 1.2 中添加。

Java文档java.security.KeyStore

本页的某些部分是根据 创建和共享的工作进行的修改,并根据 许可证中所述的条款使用。

构造函数

名称 说明
KeyStore(IntPtr, JniHandleOwnership)

创建 JNI 对象的托管表示形式时使用的构造函数;由运行时调用。

KeyStore(KeyStoreSpi, Provider, String)

创建给定类型的 KeyStore 对象,并在其中封装给定提供程序实现(SPI 对象)。

属性

名称 说明
Class

返回此 Object的运行时类。

(继承自 Object)
DefaultType

返回由安全属性指定的keystore.type默认密钥存储类型;如果没有此类属性,则返回字符串“jks”(“Java密钥存储”的首字母缩略词)。

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)

确定指定的alias密钥存储Entry是否为指定entryClass实例或子类。

Equals(Object)

指示其他对象是否“等于”此对象。

(继承自 Object)
GetCertificate(String)

返回与给定别名关联的证书。

GetCertificateAlias(Certificate)

返回其证书与给定证书匹配的第一个密钥存储项的(别名)名称。

GetCertificateChain(String)

返回与给定别名关联的证书链。

GetCreationDate(String)

返回由给定别名标识的条目的创建日期。

GetEntry(String, KeyStore+IProtectionParameter)

获取具有指定保护参数的指定别名的密钥存储 Entry

GetHashCode()

返回对象的哈希代码值。

(继承自 Object)
GetInstance(File, Char[])

返回相应密钥存储类型的已加载密钥存储对象。

GetInstance(File, KeyStore+ILoadStoreParameter)

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

GetInstance(String, Provider)

返回指定类型的密钥存储对象。

GetInstance(String, String)

返回指定类型的密钥存储对象。

GetInstance(String)

返回指定类型的密钥存储对象。

GetKey(String, Char[])

返回与给定别名关联的密钥,使用给定的密码进行恢复。

IsCertificateEntry(String)

如果由给定别名标识的条目是由调用setCertificateEntry创建的,或者由使用 a TrustedCertificateEntry的调用setEntry创建的,则返回 true。

IsKeyEntry(String)

如果由给定别名标识的条目是由调用 setKeyEntry创建的,或者由 setEntry 使用或 PrivateKeyEntry 调用 SecretKeyEntry创建的条目,则返回 true。

JavaFinalize()

当垃圾回收确定不再引用该对象时,由对象上的垃圾回收器调用。

(继承自 Object)
Load(KeyStore+ILoadStoreParameter)

从给定的输入流加载此 KeyStore。

Load(Stream, Char[])

从给定的输入流加载此 KeyStore。

Notify()

唤醒正在等待此对象的监视器的单个线程。

(继承自 Object)
NotifyAll()

唤醒正在等待此对象的监视器的所有线程。

(继承自 Object)
SetCertificateEntry(String, Certificate)

将给定的受信任证书分配给给定的别名。

SetEntry(String, KeyStore+IEntry, KeyStore+IProtectionParameter)

将密钥存储 Entry 保存在指定的别名下。

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, Int32)

使当前线程等待直到唤醒,通常是通过 <em>通知</em> 或 <em interrupted>/em<>,或直到经过一定数量的实时。

(继承自 Object)
Wait(Int64)

使当前线程等待直到唤醒,通常是通过 <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)

扩展方法

名称 说明
GetJniTypeName(IJavaPeerable)

获取实例 self类型的 JNI 名称。

JavaAs<TResult>(IJavaPeerable)

尝试强制self键入TResult,检查强制是否在Java端有效。

JavaCast<TResult>(IJavaObject)

执行 Android 运行时检查的类型转换。

JavaCast<TResult>(IJavaObject)

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

TryJavaCast<TResult>(IJavaPeerable, TResult)

尝试强制self键入TResult,检查强制是否在Java端有效。

适用于