【问题标题】:How to import key pair to keystore in java and make key not exportable如何在java中将密钥对导入密钥库并使密钥不可导出
【发布时间】:2019-04-11 10:30:35
【问题描述】:

我正在向 java 中的 Windows 密钥库添加一个密钥对(私钥和证书)。我需要使私钥不可导出。执行此操作的 Java 代码使私钥可导出。我该如何更改?

我没有找到任何可以更改的属性或属性。 Keystore.store 方法获取 LoadStoreParameter 但看起来它是关于设置私钥的密码。

PrivateKey privateKey=...;
Certificate certificate=...;

KeyStore keyStore = KeyStore.getInstance("Windows-MY");
keyStore.load(null);
keyStore.setKeyEntry("alias",privateKey,"".toCharArray(),new java.security.cert.Certificate[]{certificate});

【问题讨论】:

    标签: java keystore private-key


    【解决方案1】:

    对 Windows 加密服务的访问由 SunMSCAPI 提供程序管理。它提供了 java JCE API 和 windows 服务之间的桥梁。见documentation

    SunMSCAPI 提供程序使应用程序能够使用标准 JCA/JCE API 来访问 Microsoft Windows 平台上的本机加密库、证书存储和密钥容器。 SunMSCAPI 提供程序本身不包含加密功能,它只是 Java 环境和 Windows 上的本机加密服务之间的管道。

    SunMSCAPI 中的WINDOWS-MY 密钥库使用标准的Java KeyStore API,它没有定义任何类型的“可提取”属性,所以恐怕你无法建立它。

    【讨论】: