Я пытаюсь подключиться к блоку IIS6, работающему с сертификатом godaddy 256bit SSL, и получаю сообщение об ошибке:
java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
Я пытался определить, что может быть причиной этого, но сейчас рисую пробелы.
Вот как я подключаюсь:
HttpsURLConnection conn;
conn = (HttpsURLConnection) (new URL(mURL)).openConnection();
conn.setConnectTimeout(20000);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.connect();
String tempString = toString(conn.getInputStream());
android
ssl
ssl-certificate
Chrispix
источник
источник
Вопреки принятому ответу вам не нужен специальный менеджер доверия, вам нужно исправить конфигурацию вашего сервера!
Я столкнулся с той же проблемой при подключении к серверу Apache с неправильно установленным сертификатом dynadot / alphassl. Я подключаюсь с помощью HttpsUrlConnection (Java / Android), который бросал -
Фактическая проблема - неверная конфигурация сервера - протестируйте ее с http://www.digicert.com/help/ или подобной, и она даже скажет вам решение:
«Сертификат не подписан доверенным органом (проверка по отношению к корневому хранилищу Mozilla). Если вы купили сертификат в доверенном органе, вам, вероятно, просто нужно установить один или несколько промежуточных сертификатов . Обратитесь к поставщику сертификатов за помощью, выполнив это для вашего серверная платформа. "
Вы также можете проверить сертификат с помощью openssl:
openssl s_client -debug -connect www.thedomaintocheck.com:443
Вы, вероятно, увидите:
Verify return code: 21 (unable to verify the first certificate)
и ранее в выводе:
Цепочка сертификатов будет содержать только 1 элемент (ваш сертификат):
... но следует ссылаться на право подписи в цепочке на доверенное Android (Verisign, GlobalSign и т. д.):
Инструкции (и промежуточные сертификаты) для настройки вашего сервера обычно предоставляются органом, выдавшим ваш сертификат, например: http://www.alphassl.com/support/install-root-certificate.html.
После установки промежуточных сертификатов, предоставленных моим издателем сертификатов, у меня теперь нет ошибок при подключении с использованием HttpsUrlConnection.
источник
Вы можете доверять конкретному сертификату во время выполнения.
Просто скачайте его с сервера, вставьте ресурсы и загрузите так, используя ssl-utils-android :
В приведенном выше примере я использовал,
OkHttpClient
ноSSLContext
может быть использован с любым клиентом в Java.Если у вас есть вопросы, не стесняйтесь спросить. Я автор этой маленькой библиотеки.
источник
Обновление на основе последней документации Android (март 2017 года):
Когда вы получаете этот тип ошибки:
проблема может быть одной из следующих:
Решение состоит в том, чтобы научить
HttpsURLConnection
доверять определенному набору CA. Как? Пожалуйста, проверьте https://developer.android.com/training/articles/security-ssl.html#CommonProblemsДругие, которые используют
AsyncHTTPClient
изcom.loopj.android:android-async-http
библиотеки, пожалуйста, проверьте Setup AsyncHttpClient для использования HTTPS .источник
Если вы используете модернизацию, вам нужно настроить ваш OkHttpClient.
источник
getUnsafeOkHttpClient()
в Котлине: stackoverflow.com/a/60507560/2914140 .Отвечаю на очень старый пост. Но, возможно, это поможет какому-то новичку, и если ничего из вышеперечисленного не получится.
Объяснение: я знаю, что никто не хочет дерьма объяснения; скорее решение. Но в одном случае вы пытаетесь получить доступ к услуге с локального компьютера на удаленный компьютер, который не доверяет вашему компьютеру. Вы запрашиваете необходимость получить доверие от удаленного сервера.
Решение: в следующем решении предполагается, что выполнены следующие условия
шаги:
Вам нужен файл расширения .keystore для регистрации вашего приложения. Если вы не знаете, как создать файл .keystore; затем следуют вместе со следующей секции Создать .keystore файл или в противном случае переходите к следующему разделу жестового Apk файл
Создать файл .keystore
Откройте Android Studio. Нажмите верхнее меню Build> Generate Signed APK. В следующем окне нажмите кнопку Создать новую ... кнопку. В новом окне, пожалуйста, введите данные во все поля. Помните, что поле «Два пароля», которое я рекомендую, должно иметь одинаковый пароль; не используйте другой пароль; а также помнить о пути сохранения на самом верхнее поле Key пути магазина: . После ввода всех полей нажмите кнопку ОК.
Подпишите файл Apk
Теперь вам нужно создать подписанное приложение с файлом .keystore, который вы только что создали. Следуй этим шагам
Choose existing...
кнопкуKey store password
и тот же пароль дляKey password
полей и. Также введите псевдонимbuild.gradle
файлах, вам нужно выбратьBuild Types
иFlavors
.Build Types
выбораrelease
из выпадающегоДля
Flavors
однако это будет зависит от ваших настроек вbuild.gradle
файле. Выберитеstaging
из этого поля. Я использовал следующие настройки вbuild.gradle
, вы можете использовать так же, как у меня, но убедитесь, что вы измените наapplicationId
имя вашего пакетаНажмите два нижних
Signature Versions
флажка и нажмитеFinish
кнопку.Почти готово:
Вся тяжелая работа сделана, теперь движение истины. Чтобы получить доступ к промежуточному серверу, резервное копирование которого осуществляется через прокси-сервер, необходимо выполнить некоторые настройки в реальных тестовых устройствах Android.
Настройка прокси в устройстве Android:
Modify network
Advanced options
если вы не видитеProxy Hostname
полеProxy Hostname
въезжают в IP или имя вы хотите подключиться. Типичный промежуточный сервер будет называтьсяstg.api.mygoodcompany.com
9502
Save
кнопкуОдна последняя остановка:
Помните, что мы создали подписанный файл apk в разделе Sign APK File . Сейчас самое время установить этот APK-файл.
adb install
name of the apk file
adb command not found
. Введите полный путь какC:\Users\shah\AppData\Local\Android\sdk\platform-tools\adb.exe
install
name of the apk file
Я надеюсь, что проблема может быть решена. Если нет, пожалуйста, оставьте мне комментарий.
Салам!
источник
Сообщение об ошибке, которое я получал, было похоже, но причина в том, что самоподписанный сертификат истек. Когда была предпринята попытка клиента openssl, он дал мне причину, которая была упущена из виду, когда я проверял диалог сертификата из firefox.
Таким образом, в общем случае, если сертификат находится в хранилище ключей и имеет значение «VALID», эта ошибка исчезнет.
источник
TrustManager
и использовать другой набор критериев. Но из коробки с этим вы должны работать.У меня была такая же проблема при подключении от клиента Android к серверу Kurento. Сервер Kurento использует jks-сертификаты, поэтому мне пришлось конвертировать в него pem. В качестве входных данных для преобразования я использовал файл cert.pem, и это приводило к таким ошибкам. Но если вместо cert.pem использовать fullchain.pem - все в порядке.
источник
Используйте https://www.ssllabs.com/ssltest/ для проверки домена.
Решение Шихаб Уддина в Котлине.
источник
У меня была та же проблема, что я обнаружил, что файл сертификата .crt, который я предоставил, пропустил промежуточный сертификат. Поэтому я спросил все файлы .crt у администратора сервера, а затем объединил их в обратном порядке.
Ex. 1. Root.crt 2. Inter.crt 3. myCrt.crt
в окнах я выполнил копию Inter.crt + Root.crt newCertificate.crt
(Здесь я проигнорировал myCrt.crt)
Затем я предоставил файл newCertificate.crt в код через inputtream. Работа сделана.
источник
Ошибка привязки доверия может произойти по многим причинам. Для меня это было просто, что я пытался получить доступ
https://example.com/
вместоhttps://www.example.com/
.Поэтому вы можете дважды проверить свои URL-адреса перед началом создания собственного диспетчера доверия (как я сделал).
источник
В телефонах Gingerbread я всегда получаю эту ошибку:
Trust Anchor not found for Android SSL Connection
даже если я настроен на использование своего сертификата.Вот код, который я использую (на языке Scala):
и вот код подключения:
По сути, я настроен на доверие к своему пользовательскому сертификату. Если это не удается, я отключаю безопасность. Это не лучший вариант, но единственный выбор, который я знаю со старыми и глючными телефонами.
Этот пример кода может быть легко переведен на Java.
источник
В моем случае это происходило после обновления до Android 8.0. Самоподписанный сертификат Android, которому доверяли, использовал алгоритм подписи SHA1withRSA. Переход на новый сертификат с использованием алгоритма подписи SHA256 с RSA устранил проблему.
источник
Я знаю, что вам не нужно доверять всем сертификатам, но в моем случае у меня были проблемы с некоторыми средами отладки, где у нас были самозаверяющие сертификаты, и мне требовалось грязное решение.
Все, что мне нужно было сделать, это изменить инициализацию
sslContext
где
trustAllCerts
был создан так:Надеюсь, что это пригодится.
источник
Hostname '192.168.0.16' was not verified
. Я тестирую свой webapi через мой отладчик (IIS Express) локально. Есть идеи как это исправить? Спасибо :)У меня была похожая проблема, и я полностью исключил стратегию доверия всем источникам.
Я делюсь здесь своим решением, примененным к приложению, внедренному в Kotlin
Сначала я бы порекомендовал использовать следующий веб-сайт для получения информации о сертификате и его действительности.
Если он не отображается как «Принятые эмитенты» в доверенном хранилище Android по умолчанию , мы должны получить этот сертификат и включить его в приложение для создания настраиваемого хранилища доверенных сертификатов.
Идеальным решением в моем случае было создание диспетчера доверия высокого уровня, который сочетает в себе пользовательское хранилище доверия и Android-хранилище по умолчанию.
Здесь он представляет высокоуровневый код, используемый для настройки OkHttpClient, который он использовал с Retrofit.
Таким образом, я мог общаться с сервером с самозаверяющим сертификатом и с другими серверами с сертификатом, выданным доверенным органом сертификации.
Это все, я надеюсь, что это может кому-то помочь.
источник
Я знаю, что это очень старая статья, но я наткнулся на эту статью, пытаясь решить свои проблемы с доверием. Я опубликовал, как я это исправил. Если вы предварительно установили Root CA, вам нужно добавить конфигурацию в манифест.
https://stackoverflow.com/a/60102517/114265
источник
источник
Я также столкнулся с той же проблемой. Я просто удаляю hhtps в http, например
final public static String ROOT_URL = "https://example.com";
вfinal public static String ROOT_URL = "http://example.com";
Наконец, я решил эту проблему.
источник