Wpis z mikrobloga

Może ma ktoś pomysł.

ładuję certyfikat do javy

KeyStore p12 = KeyStore.getInstance("pkcs12");
p12.load(new FileInputStream("//certyfikat//","haslo".toCharArray());

potem chcę go ustawić do połączenia

System.setProperty("javax.net.ssl.trustStore", "p12");
System.setProperty("javax.net.ssl.trustStorePassword", "haslo");

i cały czas otrzymuje
Exception in thread "main" java.security.KeyStoreException: problem accessing trust store
Caused by: java.io.IOException: Keystore was tampered with, or password was incorrect
Caused by: java.security.UnrecoverableKeyException: Password verification failed

hasło 100% jest poprawne bo takim samym odpalam certyfikat przez keyStore Explorer

#java
  • 5
System.setProperty("javax.net.ssl.trustStore", "p12");

System.setProperty("javax.net.ssl.trustStorePassword", "haslo");


@Mintaa: nie ustawiaj tego.
Nie ruszaj default key store, które jest typu jks i ma domyślne hasło "changeit".

Do połączenia musisz ustawić na parametrach połączenia ten keystore, nie w zmiennych całego JVMa.
Przy czym, jak w poprzednim pytaniu, używasz OkHttp, to ten oczekuje pary PrivateKey i X509Certificate, a nie całego keystore (musisz wyjąć wpisy programowo)
@globalbus: Niestety nie działa,

nawet samo HeldCertificate nie występuje w bibliotece okhttp3

Pierwszy raz mam styczność z javą ale przyznam ze w pythonie całe połączenie to są 3 linijki kodu a tutaj już mam prawie 30
@Mintaa: jak chcesz zrobić zwykły PoC, to ostatni przykład stąd jest dla ciebie (przy czym wydaje mi się, że certyfikat klienta musi być w tym wypadku podpisany przez zaufanego dostawcę, inaczej trzeba jeszcze trustStore podmienić)
https://stackoverflow.com/a/45541092

API od javowego crypto nie jest zbyt przyjemne. A jak biblioteka od http, to apache http client. Ustawiasz SSLContext z buildera (musisz dopisać skąd ma brać certyfikat klienta)
https://github.com/apache/httpcomponents-client/blob/master/httpclient5/src/test/java/org/apache/hc/client5/http/examples/ClientCustomSSL.java
@globalbus: Ostatnia metoda nie działa

Exception in thread "main" javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

ze stacka przejrzałem już wszystkie i mam wrażenie że większość odpisujących ma problem z czytaniem xD

Gdzie nie pytają o połączenie z certyfikatem to pierwsza odpowiedź "wyłącz sprawdzenie certyfikatu" ( ͡° ͜ʖ ͡°)
@Mintaa: obstawiam, że serwer przedstawia się certyfikatem z czerwoną kłódką w przeglądarce? (Samopodpisany lub podpisany customowym CA). Wtedy musisz zmodyfikować trustStore, żeby mu zaufać.
Generalnie to
javax.net.ssl.debug=true i poleci masa diagnostycznego spamu na konsolę