Elettracompany.com

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

Java security cert certpathvalidatorexception trust

Доверия не нашел для 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: доверительной привязкой для пути сертификации не found.NETWORK

Привет я получил эту ошибку, когда я вызываю один API сервис от retrofit , я ищу много и нашел ответ, как

После использования метода setSSLFactoryForClient он работает нормально, но я не мог понять, что происходит неправильно и что этот метод делает я знаю, что проблема связана с проверкой подлинности сертификата SSL, но может ли кто-нибудь объяснить мне это вкратце, пожалуйста

1 Ответ

Это отключает безопасность SSL. Это нормально для локального тестирования, но не подходит для использования с реальными пользователями.

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

В более общем случае любой агент пользователя (Firefox на Windows, Safari на Mac, Android) будет иметь список корневых CAs, которым он доверяет для проверки сертификатов сайтов. Некоторые новые службы, такие как let’s encrypt, не будут доверять на старых платформах, поэтому вы можете добавить свои собственные сертификаты, которые вы знаете заранее.

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

Для реального трафика этот код означает, что ваши пользователи восприимчивы к атакам man in the middle.

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

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

Здравствуйте, я пытаюсь пожать руку с SSL на android и получаю эту ошибку: 10-21 15:39:33.279: W/System.err(500): javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException.

Я новичок android. Этот вопрос задавался много раз, но я прошел через почти все вопросы здесь. Я пытаюсь использовать самозаверяющий сертификат на сервере Node.Js (экспресс) и волейбол на android.

Я пытаюсь подключиться от Android к серверу Apache Vysper XMPP в localhost. Я использую Smack framework для выполнения операций XMPP: AbstractXMPPConnection connection = new.

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

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

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

Я использую com.neovisionaries:nv-websocket-client lib для подключения к серверу websocket, на новых устройствах Android с версией Android > 6.0 соединение готово. Но, при подключении с Android.

В моем приложении я использую самозаверяющий сертификат для подключения через https. Приложение отлично работает, когда compilesdk установлен в

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, когда сталкивался с этой проблемой.

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

Corona Labs Forums

Java error: Trust anchor for certification.

Best Answer roaminggamer 28 March 2018 — 01:00 PM

Hello again. I’ve resolved this and wanted to check-in with what I learned.

Certificates

We ended up bypassing this problem by using the client’s production server which is much more up-to-date with regards to certificates and standards.

That said, I am 99% that a protocol error devolved us to the no SNI case which then passed back the second certificate. This second certificate was no longer valid. So, any attempts to use it failed.

The solution would (IMHO) have been to edit the server files and remove the bad certificate. However, as noted, we skipped this.

Requests and Assumptions About Defaults

Soon after, I learned a lesson (again) about assuming things.

Once I got past the initial handshake I found logins from Windows worked, but all devices and OS X failed.

Investigation showed that in the failed cases, the body was empty.

Further investigation showed, that on Windows, the header was given a default mime content type of ‘ application/x-www-form-urlencoded ‘. In all other cases, no type was given.

The solution of course was the apply the type myself, and violla back in business:

  • Like This
  • Unlike

roaminggamer 23 Mar 2018

Hello @everyone. I am in the beginning part of a debug effort and wanted to post in case anyone here has also seen and solved this issue.

Summary:

I am working on an app for a client that requires me to reach out to their server to get content. Their server is secured (https) with an SSL cert.

In short, while I can run all the tests and interactions I want from my Windows desktop using the app in the simulator, once I run it on my Android device I get this error:

This is the code that causes the problem:

Steps Taken So Far:

1. I have searched this site and found a similar post but with no resolution:

2. I did follow the advice in the above thread, and it turns out there may be a problem with the server. However, I’m pressing forward with the debugging till I hear back from the client’s server guy.

3. Other reading on the WWW, but nothing so far.

Other Ideas:

I’m going to build and test on my iOS device when time permits (this is a slow path for me), but I expect the problem to still be present.

What I’m Looking For:

Basically, I’m hoping some guru out there has seen and solved this, but all insights are welcome.

I’ll post back when I resolve this and put some details on the actual resolution.

  • Like This
  • Unlike

SGS 23 Mar 2018

It is definitely server SSL related and nothing you can do will resolve this IMHO.

Their insecure root cert expired ages ago

  • Like This
  • Unlike

roaminggamer 23 Mar 2018

Thanks, and good eye!

That is probably it. They’re in dev and updating stuff on their server so my guess is this will self resolve soon.

I’ll also post back when this is resolved just to tie a bow on it.

  • Like This
  • Unlike

roaminggamer 23 Mar 2018

I’m still working on this.

While I try to work this out with the site admin, I’m wondering if there is any way to make the network.* calls more forgiving.

So far, the ONLY place they work is in the simulator on Windows 10. All other targets and the simulator on OS X get an error.

So, if you have any ideas for bypassing this, please feel free to write them below.

Meanwhile, debugging continues.

  • Like This
  • Unlike

Best Answer roaminggamer 28 Mar 2018

Hello again. I’ve resolved this and wanted to check-in with what I learned.

Certificates

We ended up bypassing this problem by using the client’s production server which is much more up-to-date with regards to certificates and standards.

That said, I am 99% that a protocol error devolved us to the no SNI case which then passed back the second certificate. This second certificate was no longer valid. So, any attempts to use it failed.

The solution would (IMHO) have been to edit the server files and remove the bad certificate. However, as noted, we skipped this.

Requests and Assumptions About Defaults

Soon after, I learned a lesson (again) about assuming things.

Once I got past the initial handshake I found logins from Windows worked, but all devices and OS X failed.

Investigation showed that in the failed cases, the body was empty.

Further investigation showed, that on Windows, the header was given a default mime content type of ‘ application/x-www-form-urlencoded ‘. In all other cases, no type was given.

The solution of course was the apply the type myself, and violla back in business:

Читать еще:  Java sql sqlexception invalid column index
Ссылка на основную публикацию
Adblock
detector