У меня есть два устройства, которые не могут подключиться к моей конечной точке TLS v1.2.Все остальные, в том числе браузеры, устройства PostMan и iOS, могут это сделать.
Устройства работают под управлением Android 5 и 7 (так что должно не быть проблемой с поддержкой TLS v1.2),
Примечание. Это не самозаверяющий сертификат.Подписано Amazon.
Непосредственными мыслями были:
Фрагментация Android - возможно, устройства (один из них - Kindle Fire 7) не включают правильные сертификаты вОПЕРАЦИОННЫЕ СИСТЕМЫ.Это будет не первый случай, когда производитель устройства принимает странное решение, нарушающее функциональность.
Доступ к API осуществляется через прокси, и на самом деле равен a Man-In-The-Middle, правильно обнаруживаемый.
Исправление (1) означает пакетирование нашего сертификата и приводит к обычным проблемам, когда срок действия нашего сертификата истекает.
Я бы предпочел, чтобы пользователь установил отладочную сборку, которая подтверждает, является ли (1) или (2) проблемой.Такая сборка будет проверять SSL-сертификат, предоставленный сервером / прокси-сервером, и регистрировать его обратно.
Веб-фреймворки:
- Retrofit v2.3.0
- OkHttp v3.9.1
Вопрос:
Как проверить информацию SSL-сертификата, которую устройство видит при попадании в мою конечную точку?
Оказывается, есть 2 разных исключения.
Планшет Kindle Fire 7 "(KFAUWI, OS 5.1.1) выбрасывает тот, который я начал исследовать, и на котором сосредоточен этот вопрос. То есть базовый сбой SSL.
java.security.cert.CertPathValidatorException:
Trust anchor for certification path not found.
at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:331)
at com.android.org.conscrypt.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:232)
at com.android.org.conscrypt.Platform.checkServerTrusted(Platform.java:114)
Устройство LG (LG-SP200, OS 7.1.2) имеет соединение, закрытое одноранговым узлом, который должен быть решен в рамках нового вопроса, если он не решен здесь:
javax.net.ssl.SSLHandshakeException:
Connection closed by peer
at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(NativeCrypto.java)
at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:360)
at okhttp3.internal.connection.RealConnection.connectTls(RealConnection.java:299)