确定密钥库类型是pkcs12还是jks(以编程方式)

时间:2014-05-21 08:17:21

标签: java keystore

有没有一种简单的方法来确定java中的密钥库类型?密钥库文件没有扩展,但我知道它可能是jks或pkcs12。

目前我正在使用这样的东西:

public static boolean isJks(File f) throws Exception{   
    KeyStore ks = null;

    FileInputStream fis = null;

    try {
        fis = new FileInputStream(f);
        ks = KeyStore.getInstance("jks");
        ks.load(fis, null);
        return true;
    } catch (IOException e) {
        if(fis != null){
            fis.close();
        }
        fis = new FileInputStream(f);
        ks = KeyStore.getInstance("pkcs12");
        ks.load(fis, null);
        return false;
    } finally {
        if(fis != null){
            fis.close();
        }
    }
}

有更简单的方法吗?如果没有,那么这是要走的路还是应该改进?

1 个答案:

答案 0 :(得分:0)

您可以按照this答案中的说明进行操作。基本上,对于JKS密钥库,您可以检查幻数,该幻数是文件开头的几个字节。预期的魔术值为0xFEEDFEED。对于PKCS12,这不是一件容易的事,但是您可以检查文件是否为ASN1结构,尽管可能会存在基于ASN1的其他文件格式,所以您加载密钥库的方法实际上可能更好。 >