首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取PEM格式的PKCS8 :找不到提供者

读取PEM格式的PKCS8 :找不到提供者
EN

Stack Overflow用户
提问于 2017-10-16 09:44:00
回答 1查看 4K关注 0票数 1

尝试用以下方式读取PEM格式的PKCS8私钥:

代码语言:javascript
复制
private static PrivateKey loadPrivateKey()
        throws IOException, GeneralSecurityException, OperatorCreationException, PKCSException {
    FileReader fileReader = new FileReader(certsRoot + "/pep-client-key.pem");
    PEMParser keyReader = new PEMParser(fileReader);

    JcaPEMKeyConverter converter = new JcaPEMKeyConverter();
    InputDecryptorProvider decryptionProv = new JceOpenSSLPKCS8DecryptorProviderBuilder().build("mypassword".toCharArray());

    Object keyPair = keyReader.readObject();
    PrivateKeyInfo keyInfo;

    if (keyPair instanceof PKCS8EncryptedPrivateKeyInfo) {
        keyInfo = ((PKCS8EncryptedPrivateKeyInfo) keyPair).decryptPrivateKeyInfo(decryptionProv); // Exception thrown from here
        keyReader.close();
        return converter.getPrivateKey(keyInfo);
    }
    return null;
}

生成此错误:

代码语言:javascript
复制
org.bouncycastle.pkcs.PKCSException: unable to read encrypted data: 1.2.840.113549.1.5.13 not available: Cannot find any provider supporting 1.2.840.113549.3.7
    at org.bouncycastle.pkcs.PKCS8EncryptedPrivateKeyInfo.decryptPrivateKeyInfo(Unknown Source)

我已经使用OpenSSL检查了该文件是否可以作为PKCS8 PEM处理,并提供了密码。

有什么想法吗?我不介意是否有一个解决方案不涉及Bouncy城堡的库。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-16 12:13:43

1.2.840.113549.3.7是PKCS5 = rfc2898秒B.2.2中DES-EDE3-CBC-Pad (在PKCS5 = rfc2898秒B.2.2中)的OID .(1.2.840.113549.1.5.13是所有PBES2变体的“外部”OID。)

Sun-now-Oracle (默认)提供程序确实支持使用CBC和PKCS5 5/7填充的DES 3算法(又名TripleDES或TDEA键控选项1),但没有此OID映射。BouncyCastle提供程序确实有映射,所以如果您在此操作中使用BC提供程序,它应该可以工作。这是可以做到的

  • 通过在security.provider.<i>中配置JRE/lib/security/java.security (update: in j9+ JRE/conf/security/java.security)或
  • 对于JVM由java.lang.security.Provider.addProvider (new BouncyCastleProvider())
  • 在此操作中,向.setProvider()调用中添加BC提供程序的名称或对象的JceOpenSSLPKCS8DecryptorProviderBuilder

注BC用于TripleDES似乎需要在j8u151下面的Oracle上使用“无限强度策略”;参见由于密码问题,无法打开PKCS12存储InvalidKeyException非法密钥大小以及许多其他的dupes。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46767281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档