当前位置: 首页 > 知识库问答 >
问题:

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

劳宇
2023-03-14

正如标题所示,我有谷歌服务帐户api访问所需的。p12文件。为了获得连接到api的凭据,有一个字段。SetServiceAccountPrivateKey(PrivateKey PrivateKey)。那么,最简单的方法是什么呢?我在类路径中有一个resources文件夹,所以如果我在那里添加p12文件,我可以从getClass().getResource()中以inputStream或URL的形式获得资源。我尝试了URL方法,但它不起作用(试图从URL.touri()创建文件对象时,我得到了一个“URI不是分层的”错误)。

共有1个答案

刁茂才
2023-03-14

您可以使用classloader.getResourceasStream(String)方法加载。p12文件,将其加载到密钥库中,然后从密钥库中获取密钥。

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 -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
 类似资料:
  • 问题内容: 顾名思义,我需要Google服务帐户api访问所需的.p12文件。为了获得连接到api的凭据,有一个字段.setServiceAccountPrivateKey(PrivateKey privateKey)。那么,最简​​单的方法是什么?我在类路径中有一个资源文件夹,因此,如果在其中添加p12文件,则可以从getClass()。getResource()中获取资源作为inputStre

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

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

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

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