java之确定 keystore 类型是 pkcs12 还是 jks(以编程方式)

sharpest 阅读:31 2024-12-31 21:38:35 评论:0

有没有一种简单的方法来确定java中的 keystore 类型? keystore 文件没有扩展名,但我知道它可能是 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(); 
        } 
    } 
} 

有没有更简单的方法来做到这一点?如果不是,那么这是要走的路还是应该改进?

请您参考如下方法:

您可以按照 this 中的说明进行操作回答。基本上,对于 JKS keystore ,您可以检查文件开头几个字节的魔数(Magic Number)。预期的魔法值为 0xFEEDFEED .对于 PKCS12,这不是一件容易的事情,但是您可以检查文件是否为 ASN1 结构,尽管可能存在基于 ASN1 的其他文件格式,因此您加载 keystore 的方法实际上可能是更好的方法。


标签:java
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号