Bazaprogram.ru

Новости из мира ПК
5 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Java security cert certpathvalidatorexception

Доверия не нашел для Android SSL-соединение

Я пытаюсь подключиться к коробке IIS6 под управлением GoDaddy 256bit SSL cert, и я получаю сообщение об ошибке:

пытался определить, что может быть причиной этого, но рисование пробелов прямо сейчас.

вот как я подключаю :

12 ответов:

решение @Chrispix опасно! доверие всем сертификатам позволяет кому-либо сделать человека в середине атаки! просто отправьте любой сертификат клиенту, и он его примет!

добавьте свой сертификат(ы) в пользовательский менеджер доверия, как описано в этом сообщении: доверяя всем сертификатам с помощью HttpClient через HTTPS

хотя это немного сложнее установить безопасное соединение с пользовательским сертификатом, это принесет вам разыскивается безопасность шифрования ssl без опасности человека в середине атаки!

вопреки принятому вами ответу не нужен пользовательский менеджер доверия, вам нужно исправить конфигурацию сервера!

я столкнулся с той же проблемой при подключении к серверу 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.

Читать еще:  Internal exception java nio channels closedchannelexception

Если у вас есть какие-либо вопросы, не стесняйтесь спрашивать. Я автор этой маленькой библиотеки.

обновление на основе последней документации Android (март 2017):

когда вы получаете ошибки такого типа:

проблема может быть одной из следующих:

  1. центр сертификации, выдавший сертификат сервера, был неизвестен
  2. сертификат сервера не был подписан CA, но был самоподписан
  3. в конфигурации сервера отсутствует промежуточный CA

решение состоит в том, чтобы научить HttpsURLConnection доверять определенному набору ЦС. Как? Пожалуйста, проверьте https://developer.android.com/training/articles/security-ssl.html#CommonProblems

другие, которые используют AsyncHTTPClient С com.loopj.android:android-async-http библиотека, пожалуйста, проверьте настройка AsyncHttpClient для использования HTTPS.

отвечая на очень старый пост. Но, возможно, это поможет какому-то новичку, и если не из вышеперечисленного получится.

объяснение: я знаю, что никто не хочет объяснения дерьма; скорее решение. Но в одном лайнере вы пытаетесь получить доступ к службе с вашего локального компьютера на удаленный компьютер, который не доверяет вашей машине. Вы запрашиваете необходимость получить доверие от удаленного сервера.

устранение: следующее решение предполагает, что у вас есть выполнены следующие условия

  1. попытка доступа к удаленному api с вашего локального компьютера.
  2. вы строите для Android-приложение
  3. ваш удаленный сервер находится под фильтрацией прокси (вы используете прокси в настройках браузера для доступа к удаленной службе api, как правило, промежуточный или dev-сервер)
  4. вы тестируете на реальном устройстве

действия:

вам нужен .файл расширения хранилища ключей в зарегистрируйтесь в своем приложении. Если вы не знаете как создать .файл хранилища ключей; а затем переходите к следующей создать .keystore file или иначе перейти к следующему разделу Подписать Apk Файл

создать .keystore file

Откройте Android Studio. Нажмите в верхнем меню построить > создать подписанный APK. В следующем окне нажмите кнопку создать новый. В новом окне введите данные во все поля. Помню два поля пароля, которые я рекомендую, должны иметь один и тот же пароль; не используйте другой пароль; а также помните путь сохранения в самом верхнем поле путь к хранилищу ключей:. После ввода всего поля нажмите кнопку ОК.

Подписать Apk Файл

теперь вам нужно построить подписанное приложение с помощью .файл хранилища ключей, который вы только что создали. Выполните следующие действия

  1. построить > чистый проект, подождите, пока он не закончит очистку
  2. построить > Создать подписанный APK
  3. клик
  4. выбрать .keystore файл, который мы только что создали в создать .keystore file раздел
  5. введите тот же пароль, который вы создали при создании в создать .keystore file. Используйте тот же пароль для Key store password и Key password поля. Также введите псевдоним
  6. нажать кнопку
  7. в следующий экран, который может отличаться в зависимости от настроек в build.gradle файлы, вам нужно выбрать Build Types и Flavors .
  8. на Build Types выбрать release из выпадающего

на Flavors однако это будет зависеть от ваших настроек в . Выбирай staging из этой области. Я использовал следующие настройки в build.gradle , вы можете использовать то же самое, что и мой, но убедитесь, что вы измените applicationId к вашему имени пакета

нажмите на два нижних Signature Versions установите флажки и нажмите .

Почти Нет:

вся тяжелая работа сделана, теперь движение истины. Чтобы получить доступ к резервному копированию промежуточного сервера через прокси, вам нужно сделать некоторые настройки в ваших реальных тестовых устройствах Android.

Настройка прокси в устройстве Android:

  1. нажмите на настройку внутри телефона Android, а затем wi-fi
  2. долгое нажатие на подключенный wifi и выберите Modify network
  3. выберите Advanced options если вы не видите Proxy Hostname поле
  4. на Proxy Hostname введите IP-адрес или имя хоста, к которому вы хотите подключиться. Типичный промежуточный сервер будет называться stg.api.mygoodcompany.com
  5. для порта введите четырехзначный номер порта, например 9502
  6. ударил

Последняя Остановка:

помните, что мы создали подписанный файл apk в подписать APK файл. Теперь настало время установить этот файл APK.

  1. откройте терминал и перейдите в папку подписанного файла apk
  2. подключите устройство Android к вашей машине
  3. удалите все предыдущие установленные apk-файлы с устройства Android
  4. выполнить adb install name of the apk file
  5. если по какой-то причине вышеприведенная команда возвращается с adb command not found . Введите полный путь как C:UsersshahAppDataLocalAndroidsdkplatform-toolsadb.exe install name of the apk file

надеюсь, что проблема может быть решена. Если нет, пожалуйста, оставьте мне комментарии.

сообщение об ошибке, которое я получал, было похоже, но причина заключалась в том, что самозаверяющий сертификат истек. Когда клиент openssl был предпринят, он дал мне причину, которая была упущена, когда я проверял диалоговое окно сертификата из firefox.

Итак, в общем случае, если сертификат находится в хранилище ключей и его «действительный», эта ошибка исчезнет.

У меня была такая же проблема при подключении с Android-клиента на сервер Kurento. Kurento использовать сертификаты сервера следующих, так что мне пришлось конвертировать Пэм к нему. В качестве входных данных для преобразования я использовал сертификат.PEM файл и это приводит к таким ошибкам. Но если использовать fullchain.Пем вместо верняк.Пем — все в порядке.

У меня была такая же проблема, что я нашел, что сертификат .crt файл я предоставил отсутствует промежуточный сертификат. Поэтому я спросил всех .crt файлы от моего администратора сервера, а затем объединил их в обратном порядке.

Ex. 1. Корень.ЭЛТ 2. Между.ЭЛТ 3. myCrt.ЭЛТ

в windows я выполнил копия Интер.ЭЛТ + корень.ЭЛТ newCertificate.ЭЛТ

(здесь я проигнорировал myCrt.crt)

тогда я предоставил newCertificate.crt-файл в код через входной поток. Работа сделанный.

в пряничных телефонах я всегда получаю эту ошибку: Trust Anchor not found for Android SSL Connection , даже если я настроил полагаться на мой сертификат.

вот код, который я использую (на языке Scala):

В основном, я настраиваю доверие к своему пользовательскому сертификату. Если это не удается, то я отключаю безопасность. Это не лучший вариант, но единственный выбор, который я знаю со старыми и глючными телефонами.

этот пример кода, может быть легко переведен в Java.

в моем случае это происходило после обновления до Android 8.0. Самозаверяющий сертификат Android был настроен на доверие, используя алгоритм подписи SHA1withRSA. Переход на новый сертификат, используя алгоритм подписи SHA256withRSA, исправил проблему.

ошибка привязки доверия может произойти по многим причинам. Для меня это было просто, что я пытался получить доступ к https://example.com/ вместо https://www.example.com/ .

поэтому вы можете дважды проверить свои URL-адреса, прежде чем начать создавать свой собственный менеджер доверия (как я сделал).

Ссылка на основную публикацию
Adblock
detector