PKCS12和JKS是keystore的格式,但是P12是不支持TrustedCertificateEntry的,如果要写入信任证书,只能使用JKS
关于KeyStore,JDK文档如下解释:
http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/security/KeyStore.html
KeyStore
管理不同类型的项。每种类型的项都实现 KeyStore.Entry
接口。提供了三种基本的 KeyStore.Entry
实现:
- KeyStore.PrivateKeyEntry
此类型的项保存一个加密的
PrivateKey
,可以选择以受保护格式存储该私钥来防止未授权访问。它也随附一个相应公钥的证书链。给定项使用私钥和证书链进行自验证 (self-authentication)。应用此验证的包括软件发布组织,它们将 JAR 文件签名为发布和/或许可软件的一部分。
- KeyStore.SecretKeyEntry
此类型的项保存一个加密的
SecretKey
,可以选择以受保护格式存储该密钥来防止未授权访问。 - KeyStore.TrustedCertificateEntry
此类型的项包含一个属于另一方的单个公钥
Certificate
。它被称为可信证书,因为 keystore 的所有者相信证书中的公钥确实属于由该证书的 subject(所有者)所标识的身份。此类型的项可以用来验证其他方。
keystore 中的每一项都用“别名”字符串标识。对于私钥和与它们相关的证书链,这些字符串用来区分实体验证自身可以采用的不同方式。例如,实体可以使用不同的证书授权或不同的公钥算法来验证本身。
在此没有指定 keystore 是否是持久性的,也没有指定 keystore 是持久性时所使用的机制。这允许使用各种技术保护敏感的(例如,私有的或秘密的)密钥。一种选择是使用智能卡或其他集成加密引擎 (SafeKeyper),也可以使用诸如文件之类的更加简单的机制(以各种格式)。
请求 KeyStore 对象的典型方式包括使用默认类型和提供一个特定的 keystore 类型。
- 根据默认类型:
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
系统将返回默认类型的 keystore 实现。 - 提供特定的 keystore 类型:
KeyStore ks = KeyStore.getInstance("JKS");
系统将返回环境中可用的指定 keystore 类型的首选实现。