Неправильная версия хранилища ключей при выполнении вызова https
Привет товарищи по кодировке Android.
Я пытаюсь сделать безопасный вызов https из моего кода Android. Вызов на эмуляторе проходит нормально, но на самом устройстве Samsung Galaxy я получаю ошибку SSL.
Я использовал метод сумасшедшего Бобса для обработки сертификата. Вот сумасшедшая ссылка Бобса: http://blog.crazybob.org/2010/02/android-trusting-ssl-certificates.html.
Проблема в том, что я получаю ошибку: "неправильная версия хранилища ключей" внутри пользовательского объекта SSLSocketFactory.
Любые предложения о том, что нужно сделать, чтобы это исправить? Благодарю.
3 ответа
Вы создали хранилище ключей в формате Bouncy Castle? Все эти 3 параметра являются обязательными при создании хранилища ключей с помощью keytool (и особенно тип хранилища ключей должен быть BKS
):
-storetype BKS
-provider org.bouncycastle.jce.provider.BouncyCastleProvider
-providerpath /path/to/bouncycastle.jar
Android использует версию 1.46 bouncycastle, убедитесь, что вы используете эту версию при создании хранилища ключей. Здесь находится версия 1.46.
Простая альтернатива - использовать Portecle для генерации BKS:
- Загрузить Boucycastle Provider 1.46
- Замените bcprov.jar в вашем каталоге установки Portecle (пример:
C:\Program Files (x86)\Portecle\bcprov.jar
). Такое же наименование требуется. - Перезапустите Portecle и создайте доверенное хранилище BKS.
Примечание: для меня проблема была на Android 4.0.3, и это исправило ее.
Больше объяснений здесь.
В случае, если кто-то наткнется на это, и отличный ответ @Jcs не решит его: у меня возникли точно такие же проблемы, и оказалось, что я неправильно установил SSL-сертификаты на свой веб-сервер. Я понял эту идею при использовании инструмента тестирования SSL digicert: мой поставщик сертификатов использовал обычную практику подписывания сертификатов сервера с промежуточным центром сертификации. После установки цепочки сертификатов (которая связывает промежуточный ЦС эмитента с корневым ЦС) все работало нормально.