Java:从密钥库文件中确定密钥库的类型
Posted
技术标签:
【中文标题】Java:从密钥库文件中确定密钥库的类型【英文标题】:Java: Determine type of KeyStore from Keystore file 【发布时间】:2019-05-10 23:05:12 【问题描述】:所以我有一个应用程序,允许用户使用 HTTPS 配置服务器。服务器使用 Undertow。要将 HTTPS 处理程序添加到 Undertow,我需要调用 Keystore.getInstance("JKS") 函数,该函数返回基于提供程序的实现。 Java 原生只支持 3 个提供程序(JKS、PKCS12 和 JCEKS),但据我了解,您可以添加自己的密钥库实现提供程序。
所以我的问题是,仅给定密钥库文件,是否可以确定它是什么类型的密钥库?我不能依赖文件扩展名,因为 PKCS12 密钥库也可以存储在 .p12 文件扩展名中。是否可以通过编程方式获取此值,以便将其传递给 Keystore.getInstance() 还是只需要从用户那里获取该输入?
【问题讨论】:
Keystore.getInstance("JKS") function which returns the implementation based on the provider
:不,它没有。它返回 JKS 类型的 KeyStore。如果这是您需要进行的方法调用,那么您没有问题。如果确实有问题,则需要将参数设为变量。我不会担心用户提供自己的提供商。
@user207421 我的意思是作为一个例子。我要么必须从文件中找出密钥库的类型并调用 getInstance 方法,要么将其作为输入公开给用户。最好是第一个。
究竟是什么例子?一般来说,你不能做第一个,对吗?您只需要尝试所有已知的提供商,或者让用户告诉您。
【参考方案1】:
目前 WildFly 正在使用 Elytron 项目进行此类功能。你可以看看[1]。
一些密钥库可以通过格式模式来区分。但是我认为在您的情况下,最简单的方法是尝试一一加载 Keystore.getInstance("PKCS12")、Keystore.getInstance("JKS")、Keystore.getInstance("JCEKS") 并查看哪一个通过。
我也认为用户可以提供密钥库类型。
[1]https://issues.jboss.org/browse/WFCORE-4058
【讨论】:
如果只有3种的话,一个一个加载看看能不能用。还有其他提供程序以及自定义密钥库实现。所以这个解决方案不能涵盖所有可能的实现。以上是关于Java:从密钥库文件中确定密钥库的类型的主要内容,如果未能解决你的问题,请参考以下文章