odczyt klucza prywatnego

0

Hej...

Nie mogę sobie poradzić z odczytem klucza prywatnego z hasłem.
Do stworzenia klucza używam openssl

  • genrsa -aes128 -out private.pem -passout pass:[myPass] 2048
    ta komenda stworzy mi klucz prywatny z hasłem.
    Jak taki klucz odczytać w javie ?

generalnie mój wygenerowany klucz zaczyna się tak:

 -----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-256-CBC,AAD52D757D1850419617727CC49C0E3C

a kończy oczywiście

 -----END RSA PRIVATE KEY----- 

nie potrafię tego zaimportować do javy

albo dostaję:

Exception in thread "main" java.io.IOException: extra data given to DerValue constructor

albo:

IOException : DerInputStream.getLength(): lengthTag=111, too big.

Jak sobie poradzić z tym problemem...może jest to nieodpowiedzni format?
czytalem że należy zamienić ten klucz na pkcs8 ale wówczas musze użyć

openssl pkcs8 -topk8 -inform PEM -outform DER -in private_key.pem \ -out private_key.der -nocrypt

a słowo -nocrypt - usuwa mi passphase z mojego klucza.

Wie ktoś może jak w javie otworzyć taki klucz ?

0

ok poradziłem sobie...może kiedyś komuś się to przyda....
do odczytu takiego pliku wcale nie musiałem zmieniać formatu na pkcs8. biblioteka bouncycactle świetnie sobie radzi z tego typu kluczami.

    public PrivateKey getPrivateKeyFromFile() {
        Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
        File privateKeyFile = new File("private.pem"); // private key file in PEM format
        PEMParser pemParser = null;
        KeyPair kp = null;
            try {
                pemParser = new PEMParser(new FileReader(privateKeyFile));
            Object object = pemParser.readObject();
            PEMDecryptorProvider decProv = new JcePEMDecryptorProviderBuilder().build("zzzz".toCharArray());
            JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider("BC");
            if (object instanceof PEMEncryptedKeyPair) {
                kp = converter.getKeyPair(((PEMEncryptedKeyPair) object).decryptKeyPair(decProv));
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                pemParser.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        PrivateKey privateKey = kp.getPrivate();
        return privateKey;
    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0