java - 如何将两个 ".jceks"文件合并为一个?

标签 java security certificate keystore

我有两个文件kestore1.jcekskeystore2.jceks。 我想将它们合并并加载到 KeyStore 对象中。

KeyStore KEY_STORE = KeyStore.getInstance("JCEKS");

input1 = new FileInputStream("C:\\Users\\tushar.moradiya\\Desktop\\keystore\\keystore1.jceks");
KEY_STORE.load(input1, Constant.JCEKS_KEYSTORE_FILE_PASSWORD.toCharArray());

input2 = new FileInputStream("C:\\Users\\tushar.moradiya\\Desktop\\keystore\\keystore2.jceks");
KEY_STORE.load(input2, Constant.JCEKS_KEYSTORE_FILE_PASSWORD.toCharArray());

但它不起作用。它覆盖对象中的最后一个文件。

最佳答案

您无法将它们读入一个对象,但可以将它们读入两个对象,然后组合内容,至少在它们不冲突的情况下:

    KeyStore ks1 = KeyStore.getInstance("jceks"), ks2 = KeyStore.getInstance("jceks");
    char[] pw = args[2].toCharArray(); KeyStore.PasswordProtection pp = new KeyStore.PasswordProtection (pw);
    try( InputStream is1 = new FileInputStream(args[0]) ){ ks1.load(is1,pw); }
    try( InputStream is2 = new FileInputStream(args[1]) ){ ks2.load(is2,pw); }
    for( Enumeration<String> aliases = ks2.aliases(); aliases.hasMoreElements(); ){
        String alias = aliases.nextElement();
        if( ks1.containsAlias(alias) ){ /* conflicting entry -- what to do? */ }
        ks1.setEntry(alias,  ks2.getEntry(alias, pp), pp);
        // could check type (or other details) before deciding whether to include
    }
<小时/>

您还可以使用 keytool -importkeystore 将它们组合成一个文件(并且它们在该单个文件中读取),但这不是一个编程解决方案,因此偏离主题,或者至少是边界。

关于java - 如何将两个 ".jceks"文件合并为一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58538615/

相关文章:

java - 即使表中的数据不为零,使用简单算术运算和别名时 JDBC 查询也会返回零

django - 在 cookie 中保存身份验证 token (Django Rest Framework + React)

c# - 仅将 ASP.NET MVC 应用程序管理站点锁定到 LocalHost

ssl - Fiddler 如何与 HTTPS 协同工作

c# - 如何对自定义套接字 TCP 协议(protocol)使用证书身份验证?

java - 列出目录中的文件时出错

java - 捕获异常后的xml解析和验证

java - okHttp 不会取消执行

c - 是否有标准方法为 crypt 系统调用生成盐?

java - 获取所有主机名匹配证书的列表