Java security cert certpathvalidatorexception - IT Справочник
Llscompany.ru

IT Справочник
3 просмотров
Рейтинг статьи
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.

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

обновление на основе последней документации 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-адреса, прежде чем начать создавать свой собственный менеджер доверия (как я сделал).

Let’s Encrypt on Android gives java.security.cert.CertPathValidatorException: Trust anchor for certification path not found

Hi have setup a small serve, generated a free certificate from Let’s encrypt and configured Nginx to use that certificate (fullchain.pem and privkey.pem)

However, when I attempt to make a call from my Android app (with OkHttp3) I get this error

Is Let’s encrypt root certificate not trusted by the Android cert trust store? Or did I miss something when setting up nginx? What is a work around for this If i still want to use Let’s encrypt certificates?

Создан 03 авг. 17 2017-08-03 15:43:44 Johny19

«Is Let’s encrypt root certificate not trusted by the Android cert trust store?» — it will depend in part on the version of Android. Older devices are more likely to have issues. «Or did I miss something when setting up nginx?» — test with a regular Web browser and see if the browser complains. «What is a work around for this» — set up certificate pinning in OkHttp, pinning to the Let’s Encrypt root certificate. – CommonsWare 03 авг. 17 2017-08-03 15:47:40

Using a regular android browser works just fine.Looks like it is more an issue with JDK trust store :/ – Johny19 03 авг. 17 2017-08-03 16:01:11

did you find a solution for this ? I have the same problem – jaumard 21 ноя. 17 2017-11-21 19:37:05

Any updates on the issue? I am facing the same problem too! – Rahul Shukla 12 дек. 17 2017-12-12 09:34:38

I think I had gave up and manually imported my certificate in the trust store (just for testing) – Johny19 12 дек. 17 2017-12-12 15:19:53

same issue here, did you solve it ? – Ali Adil 08 янв. 18 2018-01-08 07:06:17

1 ответ

I’m not sure it’s useful but, the /etc/letsencrypt/live/ /README file says:

This directory contains your keys and certificates.

privkey.pem : the private key for your certificate.

fullchain.pem : the certificate file used in most server software.

chain.pem : used for OCSP stapling in Nginx >=1.3.7.

cert.pem : will break many server configurations, and should not be used without reading further documentation (see link below).

We recommend not moving these files. For more information, see the Certbot User Guide at https://certbot.eff.org/docs/using.html#where-are-my-certificates.

So maybe you should be using chain.pem ?

On the other hand, for those not even using Nginx, I was getting the same error from Android because I mistakenly used chain.pem instead of fullchain.pem . One of the solutions for Android apps require you send the whole chain of certificates (i.e.: fullchain.pem ), as explained here:

There are two approaches to solve this issue:

Configure the server to include the intermediate CA in the server chain. Most CAs provide documentation on how to do this for all common web servers. This is the only approach if you need the site to work with default Android browsers at least through Android 4.2.

Or, treat the intermediate CA like any other unknown CA, and create a TrustManager to trust it directly, as done in the previous two sections.

Создан 22 янв. 18 2018-01-22 19:55:57 maganap

java.security.cert.CertPathValidatorException: якорь доверия для пути сертификации не найден. на api меньше 24

Я получил эту ошибку в logcat на api от 19 до 24 и нет загрузки данных с сервера в моем приложении я искал об этой ошибке и найти это решение

и назовите его в моем классе приложений onCreate, и это решило мою проблему, но в том ответе, который, если найти это решение, есть подсказка , этот код не имеет отношения и не должен использоваться! это запрещено Google.

Итак, кто-нибудь знает, какое альтернативное решение разрешено google для этой ошибки?

2 Ответа

Что такое версия TLS на вашем сервере? Скорее всего, это 1.2 или выше. Для устройств kitkat параметр 1.2 по умолчанию выключен и должен быть включен. Если на ваших устройствах есть сервисы Google play, вы можете сделать это с помощью этого. В противном случае вам нужен пользовательский класс фабрики сокетов, который указывает 1.2 и, вероятно, 1.3.

Если он ниже, чем 1.2, устройства post Kitkat не будут разрешать соединения, если вы не доверяете всем сертификатам с помощью взлома в своем вопросе. Она не должна быть ниже.

сначала вам нужно будет создать файл сертификата и вот шаги

перейдите по ссылке на ваш сайт в браузере Firefox

нажмите на зеленый замок справа от ссылки на сайт

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

появится новое окно с двумя нажатиями общие и детали выберите детали

нажмите на экспорт, чтобы экспортировать сертификат и сохранить этот файл в android активы проекта.

во-вторых, в классе приложения проекта определите переменную hurlStack и используйте следующий метод в методе приложения OnCreate

а на залпе requestQueue используют hurlStack

в-третьих, если вы используете Glide для изображений, вы получите вторую ошибку с сертификатом ssl, связанным с glide, и вам нужно будет решить ее таким образом

1-обновление в приложении построить свой gilde и okhttp3 до этих версий

2-добавьте следующий класс в свой проект

и теперь скользить будет работать с вами.

Похожие вопросы:

Я разрабатываю клиентское приложение на Android, которое подключается к моему серверу, который находится на AWS за балансировщиком нагрузки, я создал сертификат SSL на GoDaddy и добавил его в.

Я знаю, что эта тема обсуждается во многих местах, но после того, как я прошел почти все из них, я решил создать свой первый вопрос StackOverflow. Проблема заключается в следующем : Я хочу.

Есть три хоста, на которых приложение android выполняет проверку подлинности и авторизацию. Конечным хостом является REST API. Впервые при использовании Oauth процесса аутентификации и авторизации.

Пожалуйста, прежде чем сделать этот дубликат, прочитайте мою проблему. Я прочитал много вопросов и ответов об этой ошибке при использовании самозаверяющих сертификатов. Но, моя проблема заключается.

Я недавно обновил asmack jar. Теперь я получаю такую ошибку: 07-18 12:49:29.523: W/XMPPConnection(6817): javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: якорь.

Я перенес сервер с HTTP на HTTPS я использовал самозаверяющий сертификат для отправки сетевых запросов с HttpUrlConnection и он работал, но для загрузки изображений он не работает, так как я.

У меня есть проблема, когда я тестирую свое приложение NativeScript на android API 17. Установка работает нормально, но когда я пытаюсь войти с запросом HTTP на мой сервер HTTPS, запрос немедленно.

Java.security.cert.CertPathValidatorException: ошибка цепочки сертификатов

У меня есть следующая ошибка приложения при доступе к https://..appRoot../TestJavaMongo/test/mongo/all, следуя документу: https://medium.com/@blumareks/mongodb-for-you- a-hardcore-java-cloud-developer-f67b909834f4

Я тестирую подключение службы Mongo DB из приложения Liberty Java CF для IBM Cloud. Как устранить ошибку?

$ keytool -list -v -keystore mongoKeyStoreEnter пароль для кэша:

Тип Keystore: JKS Keystore provider: SUN

Ваше хранилище ключей содержит 1 запись

Имя псевдонима: mykey Дата создания: 24/06/2017 Тип записи: trustedCertEntry

p> Владелец: CN=mwsadows@us.ibm.com-0b24b0ff06b390e0cc5e803aecd5ec82 Эмитент: CN=mwsadows@us.ibm.com-0b24b0ff06b390e0cc5e803aecd5ec82 Серийный номер: 59491e1b Действителен с: Вт июн 20 23:07:39 AEST 2017 до: сб июн 2023 : 00: 00 AEST 2037 Отпечатки сертификата: MD5: A4: 54: 21: 6A: 52: E1: 8B: CB: 07: CC: 25: A3: 3B: 1A: 8B: 05 SHA1: BE: 5D: AE: 94: C3: A5: 37: 2D: 43: B2: E7: FC: CF: 39: 19: EE: B8: 10: 29: 9B SHA256: D5: 6B: EB: D6: 88: 36: D4: 77 : 06: 9B: 8D: 2B: 83: 39: 9B: 95: A5: E3: 22: 09: 99: EF: 32: 89: 31: E2: 88: C2: 86: 58: 83: 62 Название алгоритма : SHA512withRSA Версия: 3

1: ObjectId: 2.5.29.35 Criticality = false AuthorityKeyIdentifier [KeyIdentif ier [0000: 65 2C 47 37 D6 4C B7 24 E9 A1 AA 14 01 4A 12AD e, G7.L. $ . J .. 0010: 63 E0 7C 56
c..V]]

2: ObjectId: 2.5.29.19 Criticality = false BasicConstraints: [CA: true PathLen: 2147483647]

3: ObjectId: 2.5.29.37 Criticality = false ExtendedKeyUsages [serverAuth clientAuth]

4: ObjectId: 2.5.29.15 Criticality = true KeyUsage [Key_CertSign]

5: ObjectId: 2.5.29.14 Criticality = false SubjectKeyIdentifier [KeyIdentifier [0000: 65 2C 47 37 D6 4C B7 24 E9 A1 AA 14 01 4A 12AD e, G7.L. $ . J .. 0010: 63 E0 7C 56
c..V]]

2 ответа

Как говорится в ошибке, сертификату не доверяют. Я вижу, что в учебнике есть довольно существенный раздел по импорту сертификата из службы Mongo в хранилище ключей и установка его как trustStore для Liberty. Дважды проверьте эти шаги, чтобы убедиться, что вы:

Правильно полученный и сохраненный сертификат от службы Mongo, то есть, что он не является неполным или поврежденным или что-то еще.

Убедитесь, что вы создали хранилище ключей, используя команду keytool в правильном месте, и что вы заменили это из репозитория, если вы проверили это, и что он включает в себя сертификат, который вы сохранили для сервера Mongo. Вы можете использовать keytool -list -v -keystore

на своем хранилище ключей, чтобы узнать, что внутри.

Убедитесь, что вы правильно настроили Liberty, чтобы использовать это хранилище ключей в качестве хранилища доверенных. Я думаю, что учебник немного вводит в заблуждение, поскольку он говорит

Типичному приложению также потребуется установить несколько системных свойств JVM, чтобы гарантировать, что клиент представляет TLS / SSL-сертификат на сервере MongoDB: javax.net.ssl.keyStore Путь к хранилищу ключей для хранения клиентских TLS / SSL-сертификатов. Javax.net.ssl.keyStorePassword. Пароль для доступа к этому хранилищу ключей.

, Я думаю, вам действительно нужно установить это хранилище ключей, которое вы создали, как значение для свойства javax.net.ssl.trustStore (и соответственно установить свойство trustStorePassword ), поскольку JVM использует trustStore для проверки открытых ключей хостов он подключается к доверию.

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

После того, как вы проверили всю цепочку (что вы экспортировали правильный сертификат, вы создали хранилище ключей, которое содержит этот сертификат, и t если вы установили это хранилище ключей в качестве доверенного сервера для сервера), вы должны настроить безопасность, чтобы правильно поговорить с сервером Mongo. Если вы изменили существующее доверительное хранилище во время работы сервера, вам необходимо перезагрузить сервер, чтобы он смог получить эти изменения.

Android java.security.cert.CertPathValidatorException: привязка доверия для пути сертификации не найдена

Есть три хоста, которые приложение android выполняет аутентификацию и авторизацию. Конечным хостом является REST API. Впервые с использованием аутентификации Oauth и авторизации он работает без проблем.

Но если пользователь убивает приложение после входа в систему и доступа к услугам, предоставляемым REST API, а затем снова открывает приложение, эта проблема возникает. В это время процесс аутентификации и авторизации не выполняется, только REST API. Это вызвало java.security.cert.CertPathValidatorException , но он работал во время первого использования (вход в систему и использование этого приложения).

Может кто-то объясняет сценарий этого исключения и что не так с этим приложением. Это работает, если исключения сертификации игнорируются в соответствии с этим SO-ответом.

Я использую Okhttp 3 для http-запросов. Любое предложение поможет решить проблему. И, пожалуйста, дайте мне знать, если я использую фрагмент кода, это нарушение безопасности? это повлияет на безопасность приложения?

java android security ssl okhttp3

2 ответа

12 Решение Ruwanka Madhushan [2016-09-02 14:22:00]

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

Проблема заключалась в сертификате сервера, который пропускает промежуточный центр сертификации. Однако, когда первый путь сертификата сертификата завершен каким-то образом, и результат был успешной проверкой пути сертификата.

Для этого есть решение для сайта разработчика Android. он предлагает использовать настраиваемый диспетчер доверия, который доверяет этому серверному сертификату или предлагает серверу включить промежуточный ЦС в цепочку серверов.

ОБНОВЛЕНИЕ: Моя проблема была решена после добавления промежуточного центра сертификации в цепочку сертификатов со стороны сервера. Это лучшее решение. Объединение сертификата с приложением требует обновления приложения в истечении срока действия сертификата или любых других проблем, связанных с управлением сертификатами.

ОБНОВЛЕНИЕ: 03/09/2017 Самый простой способ загрузить файл сертификата, который я нашел, — это использование исходного ресурса.

где certfilename — это файл сертификата, помещенный в папку ресурсов /raw. Также okhttp sslSocketFactory(SSLSocketFactory sslSocketFactory) устарел, и предлагаемый подход в okhttp api doc можно использовать.

Также при получении сертификата с сервера лучше использовать openssl.

Потому что я использовал, чтобы захватить это из firefox и столкнулся с ситуацией, когда он был изменен защитой вируса.

1 Vipin [2017-10-30 12:24:00]

Эта проблема также может возникать, если настройки даты и времени телефона не синхронизированы. Я тестировал устройство Android, когда сталкивался с этой проблемой.

Восстановление даты и времени для текущих значений разрешило эту проблему для меня.

Читать еще:  Ошибка с0000022 при операции обновления
Ссылка на основную публикацию
ВсеИнструменты 220 Вольт
Adblock
detector