Android P без TLS: network-security-config: cleartextTrafficPermitted невозможно для IP (только домен)

Я пытаюсь подключиться к встроенному устройству с HTTP-сервером, который отлично работает на android ‹P (пока я не установил targetSdkVersion 28), потому что было изменение, которое Сетевой TLS включен по умолчанию.

Есть способ отказаться от трафика открытого текста, но кажется, что это возможно только для доменов и не для IP-адресов.


Я пытался установить android:networkSecurityConfig в манифесте с IP вместо домена, но это не сработало:

<network-security-config>
  <domain-config cleartextTrafficPermitted="false">
    <domain includeSubdomains="true">172.16.33.1</domain>
  </domain-config>
</network-security-config>

Установка этого параметра как <base-config cleartextTrafficPermitted="false"> тоже не работает.


Таким образом, кажется, что нет никакого способа заставить работать не-TLS связь без домена. Но поскольку это встроенное устройство в локальной сети, у нас нет домена (мы знаем только IP).

Это похоже на серьезную проблему для всех видов встроенных устройств, которые больше не могут обмениваться данными. Кроме того, "новые приложения и обновления существующих приложений требуют на целевой уровень API [28 в ноябре 2020 г.] » (начиная с ноября 2018 г. с API 26 и с каждым годом продвигаясь).

Есть идеи, как это сделать?


person hardysim    schedule 21.06.2018    source источник
comment
Если вы хотите включить связь без TLS, вам необходимо указать cleartextTrafficPermitted как true, а не false.   -  person laalto    schedule 21.06.2018
comment
Арг, ни в коем случае - слишком просто. Моя вина. Конечно, это должно быть true. Затем он работает с <base-config cleartextTrafficPermitted="true"> для IP-адресов. СПАСИБО!   -  person hardysim    schedule 21.06.2018
comment
Можете ли вы разрешить clearText для всех URL-адресов или вам нужно указать каждый URL-адрес?   -  person Kris B    schedule 01.06.2019


Ответы (4)


Он работает с <base-config cleartextTrafficPermitted="true"> для IP-адресов.

(Конечно, это также должно быть true, а не false).

person hardysim    schedule 21.06.2018
comment
куда это идет? внутри domain-config или только внутри network-security-config? - person Carlos.V; 30.05.2019
comment
developer.android.com/training/articles/ - person Carlos.V; 30.05.2019
comment
Можете ли вы разрешить все URL-адреса или вам нужно указывать каждый URL-адрес? - person Kris B; 01.06.2019
comment
@KrisB Посмотрите мой ответ, если он вам все еще нужен - person Langkiller; 11.07.2019

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

<application
    ...
    android:usesCleartextTraffic="true">
    ....
</application>

Если ваш minSdkVersion ниже 23, где был введен этот атрибут, Android Studio сообщит вам:

Атрибут usesCleartextTraffic используется только в API уровня 23 и выше (текущий минимум ...)

Однако, насколько я знаю, атрибут android: usesCleartextTraffic будет просто игнорироваться в SDK ниже 23.

Этот флаг игнорируется в Android 7.0 (уровень API 24) и выше, если присутствует конфигурация сетевой безопасности Android (ссылка)

person Langkiller    schedule 11.07.2019

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

network_security_config

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
  <domain-config cleartextTrafficPermitted="true">
    <domain includeSubdomains="true">172.16.33.1</domain> <!-- Debug port -->
    <domain includeSubdomains="true">abc.com</domain>
  </domain-config>
</network-security-config>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest>
    <application android:networkSecurityConfig="@xml/network_security_config">
       
    </application>
</manifest>
person Jijo Cleetus    schedule 28.10.2020
comment
Конечно, вам нужно указать свой network_security_config в манифесте. Это было ясно мне, когда я задал этот вопрос, и также упоминается в самом начале документации, на которую я ссылался в своем сообщении (developer.android.com/training/articles/security-config). - person hardysim; 29.10.2020

Ответ @hardysim работает, вот быстрый пример

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true"></base-config>
</network-security-config>
person Faisal Hassan    schedule 02.02.2020