java KeyStore 使用
来源:互联网 发布:linux vi查看文件内容 编辑:程序博客网 时间:2024/05/17 01:38
public class KeyStore
extends Object
此类表示密钥和证书的存储设施。
KeyStore 管理不同类型的条目。每种类型的条目都实现 KeyStore.Entry 接口。提供了三种基本的 KeyStore.Entry 实现:
- KeyStore.PrivateKeyEntry
此类型的条目保存一个加密的 PrivateKey,可以选择用受保护格式存储该私钥,以防止未授权访问。它还随附一个相应公钥的证书链。
给定条目使用私钥和证书链进行自验证 (self-authentication)。应用此验证的包括软件发布组织,它们将 JAR 文件签名为发布和/或许可软件的一部分。
- KeyStore.SecretKeyEntry
此类型的条目保存一个加密的 SecretKey,可以选择用受保护格式存储该密钥,以防止未授权访问。
- KeyStore.TrustedCertificateEntry
此类型的条目包含一个属于另一方的单个公钥 Certificate。它被称为可信证书,因为 keystore 的所有者相信证书中的公钥确实属于该证书的 subject(所有者)所标识的身份。
此类型的条目可用于验证其他方。
KeyStore 中的每一条目都用 “alias” 字符串标识。对于私钥及其关联的证书链,这些字符串用于区分实体验证自身可以采用的不同方式。例如,实体可以使用不同的证书授权或不同的公钥算法来验证自身。
别名是否区分大小写与实现有关。为了避免出现问题,建议不要在 KeyStore 中使用只有大小写区别的别名。
在这里没有指定 keystore 是否是持久性的,也没有指定 keystore 是持久性时所使用的机制。这允许使用各种技术保护敏感的(例如,私有的或秘密的)密钥。一种选择是使用智能卡或其他集成加密引擎 (SafeKeyper),也可以(以各种格式)使用文件之类更为简单的机制。
请求 KeyStore 对象的典型方式包括使用默认类型和提供一个特定的 keystore 类型。
- 使用默认类型:
· KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
系统将返回默认类型的 keystore 实现。
- 提供特定的 keystore 类型:
· KeyStore ks = KeyStore.getInstance("JKS");
系统将返回环境中可用的指定 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(如上文示例代码所示),也可以使用不同的密码或其他保护参数。
例子
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.InvalidKeyException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.PrivateKey;
import java.security.SignatureException;
import java.security.UnrecoverableKeyException;
import java.security.cert.Certificate;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
public class KeyReader {
public static void main(String[] args) throws KeyStoreException,
NoSuchProviderException, NoSuchAlgorithmException,
CertificateException, IOException, UnrecoverableKeyException,
InvalidKeyException, SignatureException {
// Open an input stream on the keystore file
String cerFileName = "d:/certA.cer";
String p12FileName = "d:/certA.p12";
String pfxPassword = "openssl";
InputStream fis = new FileInputStream(p12FileName);
// Create a keystore object
KeyStore keyStore = KeyStore.getInstance("PKCS12", "BC");
// Load the file into the keystore
keyStore.load(fis, pfxPassword.toCharArray());
String aliaesName = "abcd";
PrivateKey priKey = (PrivateKey) (keyStore.getKey(aliaesName, null));
System.out.println("private key:/n" + priKey);
// public key
InputStream is = new FileInputStream(cerFileName);
CertificateFactory cf = CertificateFactory.getInstance("x509");
Certificate cerCert = cf.generateCertificate(is);
System.out.println("public key:/n" + cerCert);
}
}
- java KeyStore 使用
- 【JAVA】JDK KeyStore 如何使用
- java中 SSL认证和keystore使用
- java中 SSL认证和keystore使用
- java中 SSL认证和keystore使用
- Java-密钥keytool及KeyStore的使用
- JAVA keystore
- Java Keystore
- JAVA keystore
- Java KeyStore
- android keystore的使用
- android keystore的使用
- android keystore的使用
- JDK KeyStore 如何使用
- Java KeyStore的类型
- keystore相关 (java)
- java keytool keystore 常用命令
- Java - 生成keystore
- include/console.h
- web.xml
- C++BUILDER中几种容器的使用
- URL 重写来实现会话管理
- Smarty实例教程
- java KeyStore 使用
- 常见排序算法总结
- include/const.h
- MySQL 5 不允许TEXT数据类型的列有默认值
- Smarty实例教程(2)
- 有关Navigation的研究
- 如何做好网站开发项目需求分析
- 测试
- 什么是CDN?