Сертификат Symantec не найден на Android
У меня есть приложение для Android, которое пытается отправить запросы HTTPS на сервер с сертификатом Symantec Class 3 Secure Server CA - G4. При попытке отправить запрос через HTTP-библиотеку Apache (я полагаю, это также верно для других HTTP-клиентов), возникает исключение "Нет сертификата однорангового узла". Те же запросы к тем же серверам на iOS работают нормально, и даже если я подключаюсь к серверу в Chrome, работающем на том же Android-устройстве, на котором я тестирую, он говорит, что сертификат в порядке.
Теперь я слышал, что Google утратил доверие к некоторым сертификатам Symantec, но, насколько мне известно, только те, которые имеют 1024-битный ключ. Этот вопрос подписан 2048-битным ключом. И Chrome также принимает это!
Я также обнаружил, что в этой статье [1] говорится, что мне нужно импортировать полную цепочку ключей как хранилище ключей BouncyCastle. Проблема здесь в том, что каждый пользователь указывает URL своего собственного сервера, управляя своими собственными сертификатами.
Итак, мой вопрос: кто-нибудь знаком с этой проблемой и знает обходной путь? Я нашел бесконечные руководства, показывающие мне, как проверять сертификат для запроса... но это не будет решением для меня.
[1] http://blog.antoine.li/2010/10/22/android-trusting-ssl-certificates/
1 ответ
Проблема, с которой я столкнулся на самом деле, заключалась в том, что серверу требовалась поддержка SNI (Server Name Indication) на HTTP-клиенте. Android-версия библиотеки Apache http не поддерживает SNI. Поэтому мне пришлось написать собственный SSLSocketFactory, поддерживающий его.