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

如何使用由openssl生成的java中的.key和.crt文件?

霍浩皛
2023-03-14
问题内容

我需要在Java中进行非对称加密。我使用自己的密码生成了.key和.crt文件,并使用了Opensl生成的.crt文件,该文件在http://www.imacat.idv.tw/tech/sslcerts.html中说。
如何使用这些.key和.crt文件提取Java中的公钥和私钥?


问题答案:

您的.key.crt文件可能是PEM格式。要进行检查,请使用文本编辑器将其打开,然后检查内容是否看起来像------BEGIN CERTIFICATE------(或“开始RSA私钥” …)。通常,这是OpenSSL使用的默认格式,除非您已明确指定DER。

可能不是必需的(请参阅下文),但是如果您的证书为DER格式(二进制格式),则可以使用以下方法将其转换为PEM格式:

openssl x509 -inform DER -in cert.crt -outform PEM -out cert.pem

openssl rsa如果需要,请检查帮助中是否有与私钥相似的操作。)

然后,您有两个选择:

  • 建立PKCS#12档案
    openssl pkcs12 -export -in myhost.crt -inkey myhost.key -out myhost.p12
    

然后,您可以直接从Java中将其用作“
PKCS12”类型的密钥库。大多数Java应用程序都应允许您指定除文件位置以外的密钥库类型。对于默认的系统属性,此操作是通过完成的javax.net.ssl.keyStoreType(但是您正在使用的应用程序可能没有使用此功能)。否则,如果您想显式加载它,请使用以下方法:

    KeyStore ks = KeyStore.getInstance("PKCS12");
    FileInputStream fis =
        new FileInputStream("/path/to/myhost.p12");
    ks.load(fis, "password".toCharArray()); // There are other ways to read the password.
    fis.close();

(然后,您应该能够遍历aliases()KeyStore和使用getCertificate(然后再使用getPublicKey()公钥)和getKey()

  • 使用BouncyCastle的PEMReader
     FileReader fr = ... // Create a FileReader for myhost.crt
    

    PEMReader pemReader = new PEMReader(fr);
    X509Certificate cert = (X509Certificate)pemReader.readObject();
    PublicKey pk = cert.getPublicKey();
    // Close reader…

对于私钥,您需要实现一个PasswordFinder(请参阅PEMReader
doc的链接)以构造PEMReader私钥是否受密码保护。(您需要将的结果强制readObject()转换为KeyPrivateKey。)



 类似资料:
  • 我正在尝试使用OpenSSL命令行界面创建基于椭圆曲线的证书。我正在通过在 CLI 中键入以下命令来生成密钥文件: 问题是尽管ECC密钥被成功地生成,但它没有用任何对称密码加密。但是,使用下面的命令加密RSA密钥非常简单: 是否像 RSA 密钥一样加密 ECC 密钥? 我尝试了“OpenSSL 0.9.8zh 2016年1月14日”和“OpenSSL 1.1.0g 2017年11月2日”多参数组合

  • 谁能告诉我从文件中提取/转换证书和私钥文件的正确方法/命令吗?我刚读到它们是可以互换的,但不是怎么互换的。

  • 我需要一些使用OpenSSL的帮助,以便使用C(Windows和Linux)生成数据块的签名。该应用程序与谷歌认证有关。谷歌文档中的说明如下: “使用从Google开发者控制台获得的私钥,使用SHA256withRSA(也称为RSASSA-PKCS1-V1_5-Sign,使用SHA-256哈希函数)对输入的UTF-8表示形式进行签名。输出将是字节数组。” 私钥是一个密码。p12包含1660字节二进

  • 我正在进行rpc调用签名,为了使服务器接受我们的API调用,我们需要使用RSAPrivateKey对http mime头进行签名。服务器端代码用JAVA编写,并使用“SHA256withRSA/PSS”验证签名。 我的问题是我从JAVA和c openssl代码得到了不同的签名哈希。所以问题是,openssl是否有可能生成与JAVA相同的签名哈希? JAVA代码: c代码:

  • 我读了一个链接,我可以通过C API正确编码/解码数据。 但是,我有一个由openssl命令行生成的文件: 希望使用C API解码输出。代码如下: 输出错误。有人知道怎么修吗?也许我调用了错误的函数?例如:执行副总裁是谁?我完全沉浸在openssl的文档和源代码中。 欢迎任何建议。先谢谢你。

  • 我试图为符合Java Card 2.2.1平台的智能卡生成以下程序的CAP文件: 因此,我将其保存在名为的文件中,然后将其编译为文件,如下所示: 问题1:这个警告是为了什么? 之后,我尝试将这个文件转换为其形式: 为什么转换器要寻找这个路径?我指定目录作为类目录,但它将我指定的路径与我的程序包名连接起来!为什么? Q3:当我们使用Winrar打开文件时,我们可以在header.cap和Applet