KeyManagerUtil
KeyManagerUtil是Hutool中用于处理密钥管理器的工具类,主要用于SSL/TLS相关的密钥管理,提供了丰富的密钥管理器操作功能,包括创建、加载、管理等。
# 主要功能
- 密钥管理器创建:创建各种类型的密钥管理器
- 密钥库加载:从密钥库(keystore)加载密钥
- 支持多种密钥库类型:JKS, PKCS12, JCEKS等
- 密码保护支持:支持密码保护的密钥库
- 空密钥管理器:创建空的密钥管理器
- 默认密钥管理器:获取系统默认密钥管理器
- 密钥管理器数组:生成用于SSLContext的密钥管理器数组
# 方法示例
# 示例1:从JKS密钥库创建密钥管理器
从JKS格式的密钥库文件创建密钥管理器。
// 密钥库文件路径
String keystorePath = "path/to/keystore.jks";
// 密钥库密码
String keystorePassword = "password";
// 密钥别名
String keyAlias = "alias";
// 密钥密码
String keyPassword = "keyPassword";
// 创建密钥管理器
KeyManager[] keyManagers = KeyManagerUtil.createKeyManagers(keystorePath, keystorePassword.toCharArray(), keyAlias, keyPassword.toCharArray());
// 输出: 密钥管理器数组,可用于SSLContext
# 示例2:从PKCS12密钥库创建密钥管理器
从PKCS12格式的密钥库文件创建密钥管理器。
// 密钥库文件路径
String keystorePath = "path/to/keystore.p12";
// 密钥库密码
String keystorePassword = "password";
// 创建PKCS12密钥管理器
KeyManager[] keyManagers = KeyManagerUtil.createKeyManagers(keystorePath, keystorePassword.toCharArray(), "PKCS12");
// 输出: 密钥管理器数组
# 示例3:创建空密钥管理器
创建一个空的密钥管理器数组。
KeyManager[] emptyKeyManagers = KeyManagerUtil.createEmptyKeyManagers();
// 输出: 空的密钥管理器数组
# 示例4:获取默认密钥管理器
获取系统默认的密钥管理器。
KeyManager[] defaultKeyManagers = KeyManagerUtil.getDefaultKeyManagers();
// 输出: 系统默认的密钥管理器数组
# 示例5:从InputStream创建密钥管理器
从InputStream创建密钥管理器。
try (InputStream is = Files.newInputStream(Paths.get("path/to/keystore.jks"))) {
KeyManager[] keyManagers = KeyManagerUtil.createKeyManagers(is, "password".toCharArray(), "alias", "keyPassword".toCharArray());
// 输出: 密钥管理器数组
}
# 示例6:与SSLContext结合使用
将创建的密钥管理器用于SSLContext。
// 创建密钥管理器
KeyManager[] keyManagers = KeyManagerUtil.createKeyManagers("path/to/keystore.jks", "password".toCharArray(), "alias", "keyPassword".toCharArray());
// 创建SSLContext
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(keyManagers, null, null);
// 输出: 初始化好的SSLContext,可用于HttpsURLConnection等
# 注意事项
- 密钥库密码和密钥密码应该妥善保管,避免硬编码在代码中
- 密钥库文件应该设置适当的权限,避免未授权访问
- 支持的密钥库类型包括:JKS, PKCS12, JCEKS, DKS等
- KeyManagerUtil提供的方法都是线程安全的,可以在多线程环境下使用
- 创建密钥管理器时,需要确保密钥库文件存在且可访问
- 不同的密钥库类型需要使用对应的算法和密钥工厂
- 在使用完密钥管理器后,建议及时清理敏感信息(如密码数组)
- 对于自签名证书,需要结合TrustManagerUtil使用