Witam,
Stworzyłem aplikacje na androida która używa severa JAVY(REST - SPRING BOOT), obecnie komunikacja odbywa się przez HTTP bez szyfrowania.
Stworzyłem trust store i key store za pomocą keytool'a:
keytool -genkey -keyalg RSA -alias localhost -keystore keystore.jks -storepass 111111 -validity 360
keytool.exe -export -alias localhost -file localhost.cer -keystore keystore.jks
keytool.exe -import -v -trustcacerts -alias localhost -file localhost.cer -keystore truststore.jks
Następnie na serwerze dodałem te komendy do pliku properties:
server.ssl.key-alias=FCA
server.ssl.key-password=111111
server.ssl.key-store=keystore.jks
server.ssl.key-store-provider=SUN
server.ssl.key-store-type=JKS
Client łączy się z serwerem za pomocą tego kodu:
OkHttpClient client = new OkHttpClient();
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
InputStream instream = context.getResources().openRawResource(R.raw.truststore);
keyStore.load(instream, "****".toCharArray());
instream.close();
SSLContext sslContext = SSLContext.getInstance("JKS");
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(keyStore);
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
keyManagerFactory.init(keyStore, "111111".toCharArray());
sslContext.init(keyManagerFactory.getKeyManagers(),trustManagerFactory.getTrustManagers(), new SecureRandom());
client.setSslSocketFactory(sslContext.getSocketFactory());
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("id", newUser.getId());
jsonObject.addProperty("email", newUser.getEmail());
jsonObject.addProperty("password", newUser.getPassword());
jsonObject.addProperty("fname", newUser.getFname());
jsonObject.addProperty("lname", newUser.getLname());
RequestBody requestBody = RequestBody.create(jsonMediaType, new Gson().toJson(jsonObject));
Request request = new Request.Builder()
.url(ServerValues.SERVER_ADDRESS + "/users")
.post(requestBody)
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();
Testowałem server za pomocą Post mana i tam działa wszystko przez HTTPS wiec problem leży po stronie klienta.
Gdy client łączy się z serwerem dostaje błąd: "java.io.IOException: Wrong version of key store.".
Proszę o pomoc.