3 votes

Comment configurer le proxy HTTPS du Wi-Fi, et non HTTP, via le shell adb ?

Pour HTTP, j'ai trouvé un lien : Comment définir le proxy WIFI via le shell adb ? Mais je veux configurer le proxy HTTPS via adb shell .

4voto

Irfan Latif Points 16863

Cette question est presque une réplique de questions telles que ce y ce et étroitement lié à ce y ce . En fait, elle peut être mieux expliquée par un développeur, mais comme elle revient sans cesse dans des situations légèrement différentes, je vais essayer d'expliquer ce que je sais avec quelques détails inutiles pour rendre l'image claire dans une perspective plus large.

En bref :

  • Contrairement au VPN, un proxy n'est pas conçu pour être configuré à l'échelle du système. Les applications individuelles doivent créer des connexions via le proxy au lieu de se connecter directement aux hôtes distants (sites Web visités).
  • Si une application n'a pas de support intégré pour le proxy, il est possible d'imposer le proxy sur une base par application ou à l'échelle du système. La plupart des solutions requièrent un accès Root, mais la fonction VpnService Les API fonctionnent sans Root.
    • Proxys transparents https nécessite un saut SSL (décryptage) sur le serveur mandataire, ce qui rompt le modèle de sécurité de l'infrastructure de l'entreprise. https . Ce problème doit être résolu des deux côtés, par le client et le mandataire.

Android permet de configurer le proxy pour le Wi-Fi, les données mobiles (APN) ou les deux. Depuis Android 9, les paramètres du proxy sont enregistrés dans

/data/misc/wifi/WifiConfigStore.xml
/data/user_de/<User_ID>/com.android.providers.telephony/databases/telephony.db

Les deux fichiers ne sont pas directement accessibles pour être édités sans Root. Mais il existe un autre Proxy HTTP global paramètre destiné à des dispositifs gérés qui enregistre les informations du proxy dans /data/system/users/<User_ID>/settings_global.xml . Il est possible de modifier les paramètres globaux du dispositif par l'intermédiaire du CLI :

~$ settings put global http_proxy <host>:<port>

Et à dérégler :

~$ settings put global http_proxy :0

Ou vous pouvez manuellement clés :

global_http_proxy_host
global_http_proxy_port
global_http_proxy_exclusion_list
global_proxy_pac_url

Android définit ces informations d'hôte/port comme les propriétés système Java suivantes sur tous les DVM des applications en cours d'exécution :

http.proxyHost
http.proxyPort
https.proxyHost
https.proxyPort

Mais seul le navigateur par défaut ou d'autres applications système respectent nécessairement ces propriétés réseau liées au proxy. C'est pourquoi, lors de la configuration du proxy Wi-Fi, un avertissement est émis :

Le proxy HTTP est utilisé par le navigateur mais peut ne pas être utilisé par les autres applications.

Pour les applications non personnalisées par le système, il incombe au créateur de l'application de respecter les paramètres du proxy et de les utiliser pour http y https car, en général, un serveur qui écoute sur un seul port peut traiter les deux types de demandes (GET et CONNECT), comme expliqué ci-dessous.


COMMENT FONCTIONNE LE PROXY (EXPLICITEMENT)

En fait, http / https est utilisé uniquement par proxy-aware Les applications et Android ne peuvent pas imposer cela à l'ensemble du système. Personne ne le peut, sauf le ( http client) qui fait http / https connexions. C'est parce que le proxy est défini sur la base de chaque connexion, c'est-à-dire que le client décide lui-même du type de connexion qu'il va établir lorsqu'il crée un socket réseau. Pour http L'URL complète du proxy doit être donnée après GET verbe au lieu du simple chemin. Pour https proxy le CONNECT est utilisée à la place, de sorte qu'il est demandé au proxy de créer un fichier http tunnel vers l'hôte distant, par lequel la poignée de main TLS a lieu (sans l'intervention du proxy) et le trafic crypté circule dans les deux sens. C'est essentiellement comme faire une simple redirection de port local.

Ver cette réponse pour le proxy SOCKS. Pour plus de détails : Pourquoi le proxy défini sur Android ne fonctionne pas lorsqu'il est utilisé comme hotspot ?

LE SOUTIEN DES CLIENTS AUX MANDATAIRES

Étant donné que l'établissement d'une connexion proxy relève de la responsabilité de l'application cliente, de nombreuses bibliothèques clientes ont un support intégré pour configurer les paramètres du proxy. La plupart des navigateurs Web permettent à l'utilisateur de configurer le proxy dans l'interface utilisateur des paramètres ou d'utiliser les informations fournies par le système, par exemple, sous Windows, il y a les paramètres du proxy d'IE et aussi netsh pour les programmes qui sont liés à la bibliothèque WinHTTP. Sous Linux, les variables d'environnement http(s)_proxy sont honorés par de nombreuses bibliothèques de réseau, des utilitaires CLI et des programmes GUI, y compris les navigateurs web. ( 1 ) .

Cependant, les méthodes natives ne sont pas directement applicables au cadre Java d'Android. Le système Android HttpURLConnection ( 2 , 3 ) et d'Apache HttpClient Les gestionnaires (dépréciés) honorent ( 4 , 5 ) les propriétés du système mentionnées ci-dessus ( 6 , 7 ) . Ainsi, les applications qui utilisent ces APIs peuvent utiliser le même proxy. ( 8 , 9 ) pour toutes les connexions. Un exemple est le WebView ( 10 , 11 ) qui est basé sur Chrome :

par défaut, les paramètres proxy du réseau Android sont utilisés pour rediriger les requêtes vers les serveurs proxy appropriés.

Mais toutes les bibliothèques Java ne prennent pas en compte les propriétés du système VM, comme c'était le cas avec Apache HttpClient avant la version 4.2. Ces applications peuvent écouter PROXY_CHANGE_ACTION diffuser ( 12 , 13 ) pour être informé des modifications des paramètres du proxy, puis [getDefaultProxy](https://developer.android.com/reference/android/net/ConnectivityManager.html#getDefaultProxy()) les paramètres - soit définis par l'intermédiaire de l'interface CLI (global) ou GUI (par réseau), soit par programmation. ( 14 , 15 ) .

L'application peut également demander à l'utilisateur de configurer le proxy dans l'application elle-même et d'utiliser plusieurs proxys disponibles. ( 16 , 17 ) y compris les propriétés du système ( 18 ) sur la base de chaque connexion.

Les applications prenant en charge le proxy, en particulier les navigateurs web :

  • Configuration de https (SSL) explicitement dans les paramètres par l'intermédiaire de l'interface graphique (par exemple, le proxy de Firefox network.proxy.ssl ) ou CLI (préférence de Chrome --proxy-serveur ) ou des plugins comme FoxyProxy.

  • Utilisation de .pac ( 19 , 20 , 21 ) pour importer les paramètres du proxy depuis l'hôte distant.

    Pour les points d'accès Wi-Fi, Android prend également en charge l'importation .pac (mais pas WPAD). Dans ce cas ProxyHandler y PacProcesseur Les applications d'aide mettent un proxy local à la disposition des applications mais l'authentification ne fonctionne pas.

  • CONNECT sur une connexion TLS vers un proxy SSL (par ex. Calamar o Apache ), contrairement au TCP ordinaire CONNECT qui envoie du trafic non crypté du client au proxy avant la poignée de main TLS. Voir FoxyProxy y network.proxy.proxy_over_tls sur Firefox.

  • Authentification si le proxy l'exige, les autres applications se rabattent généralement sur le mode sans proxy lorsque la connexion au proxy n'est pas établie. Les applications doivent gérer l'authentification même si elles chargent du contenu dans une WebView.

Donc si vous voulez que votre application fonctionne avec https Par conséquent, tenez compte de tous les facteurs ci-dessus et choisissez le SDK/les bibliothèques appropriés lors du codage de l'application.

APPLICATION DU PROXY (DE MANIÈRE TRANSPARENTE)

Pour les bibliothèques et les programmes qui ne fournissent aucun moyen de configurer le proxy, il existe différentes méthodes proxifiers / socksifiers à utiliser pour forcer le trafic vers un serveur proxy.

  • tun2socks est un socksifier qui accepte tout le trafic TCP (et optionnellement UDP) dirigé vers un tun dans la table de routage. C'est ainsi que le VPN fonctionne sur Android. Alors que tun2socks est un choix parfait pour être utilisé avec les tunnels SOCKS, il ne supporte pas http(s) . Mais il y a tun2http(s) (comme TunProxy ) qui sont basés sur l'API VpnService d'Android et qui redirigent de manière transparente toutes les données de l http(s) le trafic vers le proxy distant.
  • chaussettes rouges est un autre outil similaire mais il NAT tout le trafic vers un port spécifique en écoutant comme un proxy SOCKS ou HTTPS (HTTP/CONNECT). transparent_https est une autre solution minimale similaire faite sur mesure.

Les deux méthodes ci-dessus peuvent être utilisées sur Android pour transférer le trafic vers un proxy en amont, par exemple sur Internet ou sur le réseau local. ( 22 ) . Voir également les détails connexes dans cette réponse .

  • Configurer un proxy interactif comme ZAP ou mitmproxy sur votre réseau local (par exemple sur le routeur / la passerelle) en utilisant uniquement le routage / TPROXY (pas de DNAT/SNAT) et configurez-le pour qu'il utilise votre proxy en amont fonctionnant en mode explicite ( CONNECT ).
  • Utiliser la méthode d'interception de la bibliothèque partagée. Voir les détails dans cette réponse .

INTERCEPTION SSL/TLS (MITM)

Si le but de https Le proxy est le contrôle d'accès, comme la journalisation, l'analyse antivirus, le blocage, le filtrage ou l'adaptation du contenu, la mise en place de SSL. ( 23 , 24 ) est nécessaire sur le serveur proxy. Dans le absenceCONNECT la toute première requête HTTP envoyée est déjà cryptée. Ainsi, le proxy ne sait pas qui est l'hôte prévu à l'origine, ( SNI peut aider mais même avec CONNECT vous ne pouvez pas faire DPI ) sans décrypter SSL.

Cela signifie que chaque connexion SSL/TLS sortante doit être terminée et rétablie par le proxy, ce dernier doit donc être forcé d'intercepter (comme calmar ). Mais tous les https Le proxy prend en charge le décryptage SSL et travaille de manière transparente. ( 25 ) ; le s besoins partiels traitement spécial des autorités de certification. Le certificat SSL racine du proxy - qui signe le certificat du serveur web forgé dynamiquement. doit être ajouté au magasin d'informations d'identification de l'application et/ou de l'appareil du client (en conservant l'identité de l'utilisateur). ce en considération) pour éviter certificat non valide erreurs. Ou bien le client peut choisir d'ignorer les erreurs, ce qui va à l'encontre de l'objectif de la sécurité. http .

Si le but n'est pas le filtrage mais seulement de cacher les sites web visités du FAI / réseau local ou de cacher l'IP publique des sites web visités, une alternative est de faire un simple NAT des deux côtés, c'est-à-dire sur l'appareil ou le routeur et le serveur proxy distant. SSL Pass through est une approche similaire.


RELATION :

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X