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