Я пишу приложение для Android, которое будет использовать SSL для связи с сервером Linux x86, работающим на Java.Моя цель - зашифровать транспортный уровень, поэтому я решил использовать SSL.Я хотел бы, чтобы клиент генерировал свой собственный ключ при каждом новом подключении к веб-серверу.
Я получаю исключение:
W/System.err: java.io.IOException: Wrong version of key store.
at com.android.org.bouncycastle.jcajce.provider.keystore.bc.BcKeyStoreSpi.engineLoad(BcKeyStoreSpi.java:815)
at java.security.KeyStore.load(KeyStore.java:1484)
at com.example.jncy.ssltest.MainActivity$1.run(MainActivity.java:82)
at java.lang.Thread.run(Thread.java:764)
Application terminated.
Если вы проверите принятое решение этого вопроса,это настройки, которые у меня есть для клиента и сервера, и как я сгенерировал свой файл .p12
. SSLServerSocket и настройка сертификата
Из проведенного мною исследования я узнал, что Android использует версию KeyStore BKS
, а моя Java на сервере использует pkcs12
версия.Я не совсем понимаю, что происходит, но я предполагаю, что хранилища ключей должны быть одного типа?(Здесь я запутался, потому что думал, что хранилища ключей просто хранят сертификаты)
Когда я пытаюсь загрузить pkcs12 в Android, я все равно получаю то же исключение.
KeyStore trustStore = KeyStore.getInstance("pkcs12");
Log.d("TYPE", KeyStore.getDefaultType());
InputStream tstore = getResources().openRawResource(idcert);//MainActivity.class.getResourceAsStream("/"+"servercert.p12");
trustStore.load(tstore, "abc123".toCharArray());
tstore.close();