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.xmli 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.xmlz 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.xmlwskaż 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.

