Android certpathvalidatorexception trust anchor

java.security.cert.CertPathValidatorException: Trust anchor for certification path not found #182

Comments

aerlian commented Sep 22, 2015

I’m experiencing a problem when invoking HttpClient.PostAsync(). I’ve tried the call from 2 Android devices (Nexus 10 KitKat & Samsung Galaxy Tablet) and in both cases I get an exception with the call stack below [1].

At first I thought it was perhaps a problem with the server certificate not being installed correctly, but I have since eliminated that by checking it with the CA via their online tool (https://www.digicert.com/help/) and the final statement on the report generated is: «Congratulations! This certificate is correctly installed.»

I also checked the security settings on the Android device to make sure the root certificate for DigiCert is installed and has the checkbox tick, which it is on both accounts (the cert is found under the system certificates)

Do you have any suggestions for what else I might check?

[1]
javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:430)
at com.squareup.okhttp.Connection.upgradeToTls(Connection.java:242)
at com.squareup.okhttp.Connection.connect(Connection.java:159)
at com.squareup.okhttp.Connection.connectAndSetOwner(Connection.java:175)
at com.squareup.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:120)
at com.squareup.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:330)
at com.squareup.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:319)
at com.squareup.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:241)
at com.squareup.okhttp.Call.getResponse(Call.java:271)
at com.squareup.okhttp.Call$ApplicationInterceptorChain.proceed(Call.java:228)
at com.squareup.okhttp.Call.getResponseWithInterceptorChain(Call.java:199)
at com.squareup.okhttp.Call.access$100(Call.java:34)
at com.squareup.okhttp.Call$AsyncCall.execute(Call.java:162)
at com.squareup.okhttp.internal.NamedRunnable.run(NamedRunnable.java:33)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:282)
at com.android.org.conscrypt.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:202)
at com.android.org.conscrypt.OpenSSLSocketImpl.verifyCertificateChain(OpenSSLSocketImpl.java:663)
at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method)
at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:426)
. 16 more
Caused by: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.

The text was updated successfully, but these errors were encountered:

Источник

Доверия не нашел для 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 элемент (сертификат):

Читайте также:  Как установить word для андроид

. но следует ссылаться на подписывающие органы в цепочке обратно на тот, которому доверяет 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:\Users\shah\AppData\Local\Android\sdk\platform-tools\adb.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-адреса, прежде чем начать создавать свой собственный менеджер доверия (как я сделал).

Источник

When load url show Error : java.security.cert.CertPathValidatorException: Trust anchor for certification path not found in PDF android studio

When load URL and show java.security.cert.CertPathValidatorException: Trust anchor for certification path not found in android.

The First Find library load PDF most Using File-Loader and PdfViewer

Opening and viewing documents in Android applications is a very useful feature and should be included in every application. You can open any application available on your mobile phone and you will find that most of them contain document files in different ways.

And among these documents, the most common and widely used document format is the PDF format . Format PDF , or Portable Document Format is a file format that contains all the elements of printed material. This is the most used document format. For example, in payment applications, you may receive your monthly expense invoice as a PDF document.

So if you want to display some kind of document in your application, then you can use the PDF format. And this article is meant to introduce ways to open PDF files in Android apps. Hope you find the right way for your application.

Open the PDF file using WebView

The first and easiest way to display a PDF is to display it in WebView . All you need to do is place the WebView in the layout file and download the PDF file via the dedicated URL to view Google Docs documents using the function webView.loadUrl() .

In my case, the Activity name is WebViewPdf . And the layout file is activity_web_view_pdf.xml:

The drawback of this method is that you have to depend on the Google viewer path, if it is changed then you have to change it manually as well.

Open the PDF file with the library

There are various libraries in Android that can be used to display PDFs. An example is the PDFViewer library to read the PDF file and the File-Loader library to download the file from the Internet and then display that file in the application.

In your project level build.gradle file , add the following code line:

And in the module-level build.gradle file :

After adding these dependencies , you need to add the following permissions in the AndroidManifest.xml file :

From the Assets folder

First, we will look at how to view PDF files stored in the assets directory .

First, a user interface is required, with buttons for opening PDFs from different places (asset folder, on the device, from the internet) — activity_main.xml :

Next, create an Activity to display the PDF files in the application — ViewActivity and activity_view.xml :

The next step is to add the PDF file in the assets directory . You can create an asset directory by right-clicking on the java folder then New> Folder> Asset Folder

Then, add the following code to handle the event onClick for the buttons:

We will now use the PDFViewer library to perform various operations on the PDF, such as setting the default page using the defaultPage () method , enabling the swipe event using enableSwipe (). or double tap to zoom in using enableDoubletap () — ViewActivity.kt:

Similarly, you can take out PDF files already in the device to display.

From the Internet

First, we will have to download the bending PDF file using FileLoader and then use this file to display on ViewActivity using the same process as above. But here you will have to use fromFile () to add the PDF display. Here is the code for the ViewActivity.kt file :

Done, run the application and test the results offline.

When Run App in use URl this certification path

Handling custom SSL Certificates on Android and fixing SSLHandshakeException.

Источник

Читайте также:  Установка windows вместо андроида
Оцените статью