当前位置: 首页 > 面试题库 >

从Java中的.p12文件获取PrivateKey对象

夏侯楷
2023-03-14
问题内容

顾名思义,我需要Google服务帐户api访问所需的.p12文件。为了获得连接到api的凭据,有一个字段.setServiceAccountPrivateKey(PrivateKey
privateKey)。那么,最简​​单的方法是什么?我在类路径中有一个资源文件夹,因此,如果在其中添加p12文件,则可以从getClass()。getResource()中获取资源作为inputStream或URL。我已经尝试了URL方法,但是它不起作用(尝试从URL.toURI()创建File对象时出现“
URI不是分层的”错误)。


问题答案:

您可以使用ClassLoader.getResourceAsStream(String)方法加载.p12文件,将其加载到KeyStore,然后他们从KeyStore获取密钥。

KeyStore keystore = KeyStore.getInstance("PKCS12");
keystore.load(this.getClass().getClassLoader().getResourceAsStream("keyFile.p12"), p12Password.toCharArray());
PrivateKey key = (PrivateKey)keystore.getKey(keyAlias, p12Password.toCharArray());

ClassLoader.getResourceAsStream(String) 只要它们已经在类路径中,就可以从任何位置加载资源,而无需指定文件的路径。

keyAlias是p12文件中与私钥对应的条目的名称。PKCS12文件可以包含多个条目,因此您需要某种方式来指示要访问的条目。别名是如何实现的。

如果不确定私钥的别名是什么,则可以keytool从命令行使用实用程序列出p12文件的内容。此工具包含在所有JRE和JDK安装中。

keytool -list -keystore keyFile.p12 -storepass password -storetype PKCS12

输出量

Keystore type: PKCS12
Keystore provider: SunJSSE

Your keystore contains 1 entry

yourKeyAlias, Sep 4, 2013, PrivateKeyEntry,
Certificate fingerprint (MD5): 48:A8:C4:12:8E:4A:8A:AD:58:81:26:90:E7:3D:C8:04


 类似资料:
  • 正如标题所示,我有谷歌服务帐户api访问所需的。p12文件。为了获得连接到api的凭据,有一个字段。SetServiceAccountPrivateKey(PrivateKey PrivateKey)。那么,最简单的方法是什么呢?我在类路径中有一个resources文件夹,所以如果我在那里添加p12文件,我可以从getClass().getResource()中以inputStream或URL的形

  • 我正在尝试从检索或实例,而不将保存到文件系统。 中是否有任何方法从现有的返回或?

  • 问题内容: 我正在将Java命令行应用程序打包在一个使用Google的某些API的单个JAR文件中。 我需要通过私钥“ Credentials.p12”设置一个GoogleCredential对象。 现在,我可以使其工作,但是文件“ Credentials.p12”位于打包的JAR文件外部。 如何使用JAR内部的p12文件使其工作? 从本文档中,我认为我可以使用的唯一其他选择是使用PrivateK

  • 问题内容: 我有一个提供文件(包括文件名)的绝对路径的文件。我只想获取文件名。最简单的方法是什么? 必须尽可能地笼统,因为我无法事先知道该URL是什么。我不能简单地创建一个URL对象并使用-尽管所有可能的情况都是理想的- 因为它不一定是前缀,它可以是c:/或类似的东西。 问题答案: 要么 请注意,第一个解决方案取决于系统。它仅考虑系统的路径分隔符。因此,如果您的代码在Unix系统上运行并接收Win

  • 我想通过使用“文件类”从项目文件夹中获取文件,我如何做到这一点?