CertPathValidatorException: привязка доверия для пути сертификата не найдена – модернизация AndroidAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 CertPathValidatorException: привязка доверия для пути сертификата не найдена – модернизация Android

Сообщение Anonymous »

Я создаю приложение для Android, которое использует https для связи с сервером. Я использую Retrofit и OkHttp для отправки запросов. Это отлично работает для стандартных запросов http. Ниже приведены шаги, которые я выполнил.

Шаг 1:
Получил файл сертификата с сервера с помощью команды

Код: Выделить всё

echo -n | openssl s_client -connect api.****.tk:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > gtux.cert
Шаг 2:
Преобразовал сертификат в формат BKS с помощью следующих команд

Код: Выделить всё

keytool -importcert -v -trustcacerts -file "gtux.cert" -alias imeto_alias -keystore "my_keystore.bks" -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "bcprov-jdk16-146.jar" -storetype BKS
Он запросил пароль, и файл был успешно создан.

Шаг 3:

Создайте OkHttpClient и используйте его для выполнения https-запросов

Код: Выделить всё

public class MySSLTrust {
public static OkHttpClient trustcert(Context context){
OkHttpClient okHttpClient = new OkHttpClient();
try {
KeyStore ksTrust = KeyStore.getInstance("BKS");
InputStream instream = context.getResources().openRawResource(R.raw.my_keystore);
ksTrust.load(instream, "secret".toCharArray());
// TrustManager decides which certificate authorities to use.
TrustManagerFactory tmf = TrustManagerFactory
.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(ksTrust);
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, tmf.getTrustManagers(), null);
okHttpClient.setSslSocketFactory(sslContext.getSocketFactory());
} catch (KeyStoreException | IOException | NoSuchAlgorithmException | CertificateException | KeyManagementException e) {
e.printStackTrace();
}
return okHttpClient;
}
}
Шаг 4:[/b]

Необходимо создать RestAdapter

Код: Выделить всё

RestAdapter.Builder()
.setRequestInterceptor(intercept)
.setEndpoint("https://api.****.tk")
.setClient(new OkClient(this))
.setLogLevel(RestAdapter.LogLevel.FULL)
.setLog(new AndroidLog("RETROFIT"))
.build();
Но, наконец, при запуске приложения оно выдает мне CertPathValidatorException: привязка доверия для пути сертификата не найдена. Пожалуйста, помогите мне решить эту проблему. Спасибо.

Другие неудачные попытки:
Пытался установить сертификат на моем Xperia Z2, и он говорит, что файл был установлен, но когда я запускаю приложение выдает то же исключение.

Журнал ошибок
Вот журнал ошибок, который я получил при выполнении...
Журнал ошибок

Вставлен туда, чтобы его было легко читать..

Подробнее здесь: https://stackoverflow.com/questions/292 ... ound-retro
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»