Rocket chat android 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.

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

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

Читайте также:  Final fantasy xv pocket edition андроид

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

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

Источник

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:

Источник

Cert Path Validator Exception Class

Definition

Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.

An exception indicating one of a variety of problems encountered when validating a certification path.

Remarks

Portions of this page are modifications based on work created and shared by the Android Open Source Project and used according to terms described in the Creative Commons 2.5 Attribution License.

Constructors

Creates a CertPathValidatorException with no detail message.

A constructor used when creating managed representations of JNI objects; called by the runtime.

Creates a CertPathValidatorException with no detail message.

Creates a CertPathValidatorException with no detail message.

Creates a CertPathValidatorException with no detail message.

Creates a CertPathValidatorException with no detail message.

Creates a CertPathValidatorException with no detail message.

Fields

Properties

Returns the cause of this throwable or null if the cause is nonexistent or unknown.

(Inherited from Throwable) CertPath

Returns the certification path that was being validated when the exception was thrown.

The handle to the underlying Android instance.

(Inherited from Throwable) Index

Returns the index of the certificate in the certification path that caused the exception to be thrown.

Creates a localized description of this throwable.

(Inherited from Throwable) Message

Returns the detail message string of this throwable.

(Inherited from Throwable) PeerReference (Inherited from Throwable) Reason

Returns the reason that the validation failed.

This API supports the Mono for Android infrastructure and is not intended to be used directly from your code.

This API supports the Mono for Android infrastructure and is not intended to be used directly from your code.

Methods

Appends the specified exception to the exceptions that were suppressed in order to deliver this exception.

(Inherited from Throwable) Dispose() (Inherited from Throwable) Dispose(Boolean) (Inherited from Throwable) FillInStackTrace()

Fills in the execution stack trace.

(Inherited from Throwable) GetStackTrace()

Provides programmatic access to the stack trace information printed by #printStackTrace() .

(Inherited from Throwable) GetSuppressed()

Returns an array containing all of the exceptions that were suppressed, typically by the try -with-resources statement, in order to deliver this exception.

(Inherited from Throwable) InitCause(Throwable)

Initializes the cause of this throwable to the specified value.

(Inherited from Throwable) PrintStackTrace()

Prints this throwable and its backtrace to the standard error stream.

(Inherited from Throwable) PrintStackTrace(PrintStream)

Prints this throwable and its backtrace to the standard error stream.

(Inherited from Throwable) PrintStackTrace(PrintWriter)

Prints this throwable and its backtrace to the standard error stream.

(Inherited from Throwable) SetHandle(IntPtr, JniHandleOwnership)

Sets the Handle property.

(Inherited from Throwable) SetStackTrace(StackTraceElement[])

Sets the stack trace elements that will be returned by #getStackTrace() and printed by #printStackTrace() and related methods.

(Inherited from Throwable) ToString() (Inherited from Throwable) UnregisterFromRuntime() (Inherited from Throwable)

Explicit Interface Implementations

IJavaPeerable.Disposed() (Inherited from Throwable)
IJavaPeerable.DisposeUnlessReferenced() (Inherited from Throwable)
IJavaPeerable.Finalized() (Inherited from Throwable)
IJavaPeerable.JniManagedPeerState (Inherited from Throwable)
IJavaPeerable.SetJniIdentityHashCode(Int32) (Inherited from Throwable)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) (Inherited from Throwable)
IJavaPeerable.SetPeerReference(JniObjectReference) (Inherited from Throwable)

Extension Methods

Performs an Android runtime-checked type conversion.

Источник

Читайте также:  The android car stereo
Оцените статью