You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Windows密钥库(keyStore)转换为JKS格式文件

Windows系统密钥库转JKS格式实现方案

实现逻辑

先通过SunMSCAPI provider加载Windows原生密钥库(Windows-MY/Windows-Root),遍历所有密钥/证书条目后写入新创建的JKS类型密钥库,最终持久化到本地文件即可。

注意事项

  • 运行环境需使用JDK 8及以上版本,默认内置SunMSCAPI安全Provider,无需额外依赖
  • 访问Windows系统密钥库依赖当前登录用户的系统权限,导出私钥时会触发系统权限弹窗,确认允许即可完成读取
  • 仅标记为可导出的私钥才能完整导出到JKS文件,不可导出的私钥只能导出对应的公钥证书

完整实现代码

import java.io.FileOutputStream;
import java.security.Key;
import java.security.KeyStore;
import java.security.cert.Certificate;
import java.util.Enumeration;

public class WinKeyStoreToJKS {
    public static void main(String[] args) throws Exception {
        // 配置参数
        String winKsType = "Windows-MY"; // 要转换的Windows密钥库类型,可替换为Windows-Root
        String jksPath = "D:/output.jks"; // 输出JKS文件路径
        char[] jksPassword = "your_jks_password".toCharArray(); // JKS存储密码,自行修改

        // 1. 加载Windows系统密钥库
        KeyStore winKs = KeyStore.getInstance(winKsType, "SunMSCAPI");
        // Windows密钥库靠系统权限校验,加载密码传null即可
        winKs.load(null, null);

        // 2. 创建空的JKS密钥库
        KeyStore jksKs = KeyStore.getInstance("JKS");
        jksKs.load(null, jksPassword);

        // 3. 遍历Windows密钥库所有条目,写入JKS
        Enumeration<String> aliases = winKs.aliases();
        while (aliases.hasMoreElements()) {
            String alias = aliases.nextElement();
            System.out.println("正在处理条目:" + alias);
            
            if (winKs.isKeyEntry(alias)) {
                // 处理密钥条目(含私钥)
                // 此处密码和JKS存储密码保持一致,可根据需求修改
                Key key = winKs.getKey(alias, null);
                Certificate[] chain = winKs.getCertificateChain(alias);
                jksKs.setKeyEntry(alias, key, jksPassword, chain);
            } else if (winKs.isCertificateEntry(alias)) {
                // 处理证书条目
                Certificate cert = winKs.getCertificate(alias);
                jksKs.setCertificateEntry(alias, cert);
            }
        }

        // 4. 持久化JKS到本地文件
        try (FileOutputStream fos = new FileOutputStream(jksPath)) {
            jksKs.store(fos, jksPassword);
        }
        System.out.println("转换完成,JKS文件已保存到:" + jksPath);
    }
}

验证转换结果

可通过JDK自带的keytool命令验证生成的JKS文件内容:

keytool -list -keystore D:/output.jks -storepass your_jks_password

内容的提问来源于stack exchange,提问作者HELLO WORLD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 10:57:05