【问题标题】:PrivateKeyGenerated by OpenSSL to RSACRTPrivateKey objectPrivateKey 由 OpenSSL 生成到 RSACRTPrivateKey 对象
【发布时间】:2015-02-13 08:30:48
【问题描述】:

有一个PEM格式的privateKey文件,通过Openssl命令生成.csr

openssl req -newkey rsa:2048 -nodes -out %~dp0\req.csr -keyout %~dp0\..\private.key -sha256 -config %~dp0\..\cfg.cfg

现在,我想从那个文件中得到一个中国剩余定理 - 关键对象。 但我现在不成功。 所以也许你可以帮我一把。

【问题讨论】:

    标签: java openssl rsa bouncycastle chinese-remainder-theorem


    【解决方案1】:

    我不确定您是否需要仅支持 BC(LWAPI?)的解决方案,或者您是否会选择可以使用 Sun 或 BC 提供商的 JCE。如果是后者:

    由 openssl 生成和编写的 RSA 密钥对始终采用 CRT 形式,除非您努力阻止它,而 req 不会。对于openssl 1.0.0+,来自req -newkey(和大多数其他东西)的私钥文件是PKCS#8 包含 PKCS#1 CRT;在旧版本中,它是“旧版”PKCS#1 CRT,必须重新格式化为 PKCS#8,最容易通过 (edit) openssl pkcs8 -topk8 -nocrypt -in *file* -out *file* [-outform der] (见下文)。 PKCS#8 可以而且经常是加密的,但 req -newkey -nodes 是未加密的,pkcs8 -nocrypt 也是如此。

    JCE 可以读取 (edit) 未加密的 DER PKCS#8,其中包含 PKCS#1 CRT(以及其他内容)。使用 openssl 将 PEM 转换为 DER 更容易,因为它是一个简单的命令行(特别是如果结合 legacy 到 PKCS#8 的转换,请参见上文);然后在 Java 中:

    • 将 (edit) 未加密的 PKCS#8 DER 读入 byte[] 假设 buffer
    • 将其传递给java.security.KeyFactory.getInstance("RSA"[,provider]) .generatePrivate(buffer)(或等效项)。

    结果具有依赖于提供者的类型,但无论哪种情况,它都实现了接口java.security.interfaces.RSAPrivateCrtKey

    JCE 本身不做 PEM。如果您有 PEM,请阅读它,去除 BEGIN/END 行,将剩余的 base64 转换为字节,然后继续使用 JCE。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-29
      • 2011-11-12
      • 1970-01-01
      • 2019-08-09
      • 2021-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多