Błąd internetu

Błąd ERR_CLEARTEXT_NOT_PERMITTED – przyczyny i naprawa

Mateusz Sobociński
Autor: Mateusz Sobociński - CEO & Red. Nacz. @ asMAX
4 min. czytania

Błąd ERRCLEARTEXTNOT_PERMITTED oznacza, że aplikacja lub witryna próbuje połączyć się przez nieszyfrowany protokół HTTP zamiast bezpiecznego HTTPS, co od Androida 9 (Pie) domyślnie jest blokowane ze względów bezpieczeństwa. Ten poradnik wyjaśnia przyczyny błędu i prezentuje skuteczne metody rozwiązania zarówno dla webmasterów, web deweloperów, jak i użytkowników końcowych.

Spis treści

  • Czym jest błąd ERRCLEARTEXTNOT_PERMITTED?
  • Przyczyny występowania błędu
  • Instrukcje rozwiązania dla webmastera/web dewelopera
    • 1. Wymuszanie używania HTTPS (rekomendowane)
    • 2. Edycja AndroidManifest.xml (tylko aplikacje Android)
    • 3. Dodanie wyjątku przez networksecurityconfig.xml
  • Instrukcje dla użytkownika końcowego
  • Pytania i odpowiedzi
  • Dodatkowe zalecenia i bezpieczeństwo

Czym jest błąd ERRCLEARTEXTNOT_PERMITTED?

ERRCLEARTEXTNOT_PERMITTED to komunikat błędu pojawiający się głównie w aplikacjach mobilnych uruchamianych na Androidzie (także w WebView), gdy próbują one nawiązać nieszyfrowane połączenie HTTP zamiast wymaganego obecnie połączenia HTTPS.

Przyczyny występowania błędu

  • Android domyślnie blokuje niezabezpieczone połączenia HTTP od wersji 9 (Pie), aby chronić dane użytkowników przed podsłuchiwaniem i atakami typu man-in-the-middle.
  • Błąd może wystąpić, jeśli:
    • Twoja aplikacja odwołuje się do adresów zaczynających się od http:// (zamiast https://).
    • Backend/API, z którego korzysta aplikacja/webview, jest dostępny tylko przez HTTP.
    • Nie skonfigurowałeś wyjątków dla domen HTTP w pliku konfiguracyjnym aplikacji.

Rozwiązania dla webmastera i web dewelopera

1. Wymuszanie używania HTTPS (zalecane)

Najlepszą i najbezpieczniejszą metodą jest przejście na HTTPS:

  • Zainstaluj certyfikat SSL na swoim serwerze.
    • Jeśli korzystasz z WordPress, zainstaluj wtyczkę typu „Really Simple SSL” lub wymuś HTTPS przez .htaccess.
    • Jeśli korzystasz z hostingu, sprawdź, czy udostępnia on opcję automatycznej instalacji SSL, np. Let’s Encrypt.
  • Przekieruj cały ruch z HTTP na HTTPS.
    • Na serwerze Apache dodaj do pliku .htaccess:
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
- Na serwerze Nginx dodaj w sekcji server: 
server { listen 80; server_name twojadomena.pl; return 301 https://$host$request_uri; } 
  • Testuj aplikację/stronę pod adresem https://.
  • Zaktualizuj wszystkie odwołania do zasobów (np. API, obrazy, biblioteki) na https://.

2. Edycja AndroidManifest.xml (tylko dla deweloperów aplikacji Android)

Jeśli z różnych względów musisz na chwilę dopuścić połączenia HTTP (NIE JEST TO REKOMENDOWANE!):

  • Otwórz plik AndroidManifest.xml i znajdź tag <application>.
  • Dodaj lub ustaw atrybut:
<application ... android:usesCleartextTraffic="true" ...> ... </application> 
  • Zapisz plik i ponownie zbuduj aplikację.

Uwaga – Jest to rozwiązanie tymczasowe, które naraża użytkowników na utratę bezpieczeństwa. Stosuj tylko podczas developmentu lub w bardzo kontrolowanych sytuacjach!

3. Dodanie wyjątku przez network_security_config.xml (dla wybranych domen HTTP)

Jeśli musisz dopuścić nieszyfrowany ruch tylko dla wybranych domen:

  • Utwórz plik res/xml/network_security_config.xml z treścią:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">twojadomena.pl</domain> </domain-config> </network-security-config> 
  • W AndroidManifest.xml wskaż plik konfiguracyjny:
<application ... android:networkSecurityConfig="@xml/network_security_config" ...> ... </application> 
  • Dzięki temu tylko wskazana domena oraz określone subdomeny będą mogły być ładowane przez HTTP.

Instrukcje dla użytkownika końcowego

  • Spróbuj otworzyć problematyczną stronę w najnowszej wersji przeglądarki Chrome lub urządzenia.
  • Zgłoś problem właścicielowi strony/aplikacji. Niestety użytkownik końcowy nie ma realnych możliwości ingerencji – źródło problemu leży w konfiguracji serwera lub aplikacji.

Pytania i odpowiedzi

Czy powinienem korzystać z HTTP zamiast HTTPS w mojej aplikacji?
Zdecydowanie NIE. HTTP przesyła dane nieszyfrowane, przez co są one podatne na przechwycenie. Google wymusza blokadę HTTP właśnie z powodów bezpieczeństwa użytkownika.

Czy mogę tymczasowo pozwolić na HTTP w aplikacji?
Możesz, ale tylko do celów testowych lub w środowisku developerskim przez android:usesCleartextTraffic="true". Po przeniesieniu aplikacji do produkcji BEZWZGLĘDNIE używaj HTTPS.

Jak trwale pozbyć się błędu ERRCLEARTEXTNOT_PERMITTED?
Przenieś całą komunikację na protokół HTTPS oraz wymuś jego użycie na serwerze i w źródłach aplikacji.

Dodatkowe zalecenia i bezpieczeństwo

  • Stosuj HTTPS wszędzie tam, gdzie przetwarzane są jakiekolwiek dane użytkownika.
  • Aktualizuj certyfikaty SSL/TLS oraz testuj regularnie działanie strony po aktualizacjach lub migracjach.
  • Sprawdzaj logi aplikacji i WebView pod kątem prób łączenia przez HTTP i eliminuj je na bieżąco.
Podziel się artykułem
CEO & Red. Nacz. @ asMAX
Obserwuj:
Ex-redaktor w GW (Technologie) i ex-PR w koreańskim start-upie technologicznym. Absolwent Imperial College Business School (MBA) i Politechniki Warszawskiej. Od 2025 CEO i redaktor naczelny w asMAX.
Brak komentarzy

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *