2017-10-16 3 views
0

は、以下でPEM形式のPKCS8秘密鍵を読み取ろうとするプロバイダを見つけることができません:読書PKCS8:

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; 
} 

は、このエラーを生成します。私は、OpenSSLをチェックしました

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) 

そのファイルをパスワードが提供されたPKCS8 PEMとして処理できることを確認してください。

BouncyCastleのライブラリが含まれていないソリューションがあるかどうかは気にしません。

答えて

2

1.2.840.113549.3.7は、PKCS5 = rfc2898 sec B.2.2のDES-EDE3-CBCパッド(PBES2内)のOIDです。 (1.2.840.113549.1.5.13はすべてPBES2バリアントのための '外側' OIDである。)

日 - 今のOracle (デフォルト)プロバイダがは、DES-EDE3アルゴリズム(別名トリプルDESやTDEAキーイングオプションをサポートしています1)とCBCとPKCS5/7パディングを使用していますが、にはこのOIDマッピングがありません。 BouncyCastleプロバイダにはマッピングがあるため、この操作にBCプロバイダを使用する場合は動作するはずです。これはあなたのJceOpenSSLPKCS8DecryptorProviderBuilder呼び出しにBCプロバイダのための名前またはオブジェクトで.setProvider()を追加することによって、この操作のためのjava.lang.security.Provider.addProvider (new BouncyCastleProvider())または
*により、JVM用JRE/lib/security/java.securityまたは
*でsecurity.provider.<i>を設定することにより、すべてのJVM用
*を行うことができます

注意TripleDESのBCは、j8を通じてOracle Java上で '無制限の強度ポリシー'を要求するようです。 cannot open PKCS12 store because of passwordおよびInvalidKeyException Illegal key sizeおよび他の多くのドゥープを参照してください。