В моем приложении я хочу использовать https-соединение с указанным пользователем сервером, который использует самозаверяющий сертификат. Я уже собрал, что
- самоподписанные сертификаты отклоняются (как ожидалось)
- андроид keystore/truststore не используется для приложений, поэтому приложения должны создавать и использовать собственный собственный магазин,
- там есть "keytool" в JDK для создания доверительного магазина, который может быть предоставлен в приложение как ресурс, который, однако, не является решением, так как я не знаю сервер (и его сертификат заранее)
Поскольку https-сервер указан пользователем, я заранее не знаю сертификат сервера и, следовательно, хочу добавить сертификат сервера программно в доверенное приложение (показывая сертификат пользователю и попросив его принять его). После добавления в доверительный магазин приложение должно использовать этот доверенный сервер для аутентификации сервера.
Я НЕ хочу просто принимать каждый самоподписанный сертификат без проверки пользователем отпечатка пальца, как предлагают некоторые примеры в Интернете.
Теперь проблема в том, что я совершенно не знаком с Java и Android, и я стараюсь понять внутреннюю работу AndroidHttpClient или DefaultHttpClient. У меня есть базовый HTTP, работающий в моем приложении, но не нашел никакого примера о том, как на самом деле добавить сертификаты в доверительный магазин внутри приложения по запросу пользователя.
Кто-нибудь знает, как достичь этого или знает рабочий пример, на который я могу смотреть?
Любые намеки приветствуются. Спасибо.
EDIT: найдено решение в TrustManagerFactory.java классе K9 Mail. Я предлагаю взглянуть на него, если у вас есть тот же вопрос.