Błąd internetu

Błąd ERR_IMPORT_CERT_ALREADY_EXISTS – przyczyny i naprawa

Mateusz Sobociński
Autor: Mateusz Sobociński - CEO & Red. Nacz. @ asMAX
20 min. czytania
  1. Wprowadzenie
  2. Czym jest błąd ERRIMPORTCERTALREADYEXISTS
  3. Przyczyny występowania błędu
  4. Rozwiązania dla użytkowników końcowych
  5. Rozwiązania dla webmasterów i deweloperów
  6. Zaawansowane techniki rozwiązywania
  7. Prewencja i najlepsze praktyki
  8. FAQ – Najczęstsze pytania

Wprowadzenie {#wprowadzenie}

Błąd ERR_IMPORT_CERT_ALREADY_EXISTS to jeden z problemów związanych z certyfikatami SSL/TLS, który może znacząco wpływać na funkcjonowanie witryn internetowych i aplikacji. Ten poradnik przedstawia kompleksowe podejście do diagnozowania i rozwiązywania tego błędu, zarówno z perspektywy użytkownika końcowego, jak i specjalistów IT.

Czym jest błąd ERRIMPORTCERTALREADYEXISTS {#czym-jest-błąd}

Definicja techniczna

Błąd ERR_IMPORT_CERT_ALREADY_EXISTS występuje, gdy system próbuje zaimportować certyfikat SSL/TLS, który już istnieje w magazynie certyfikatów. Jest to mechanizm zabezpieczający przed duplikacją certyfikatów, ale może również powodować problemy w prawidłowym funkcjonowaniu aplikacji.

Gdzie może wystąpić

  • Przeglądarki internetowe (Chrome, Firefox, Edge, Safari)
  • Serwery webowe (Apache, Nginx, IIS)
  • Aplikacje desktopowe korzystające z certyfikatów
  • Systemy operacyjne (Windows, macOS, Linux)
  • Narzędzia deweloperskie i środowiska testowe

Objawy błędu

  • Komunikaty o błędzie podczas importowania certyfikatu
  • Problemy z nawiązaniem bezpiecznego połączenia HTTPS
  • Ostrzeżenia o niezaufanych certyfikatach
  • Błędy podczas uruchamiania aplikacji wykorzystujących SSL/TLS

Przyczyny występowania błędu {#przyczyny}

1. Duplikacja certyfikatów

Najczęstsza przyczyna – próba importu certyfikatu, który już znajduje się w magazynie:

Certyfikat o identycznej nazwie lub odcisku palca już istnieje 

2. Konflikt między certyfikatami

  • Różne wersje tego samego certyfikatu
  • Certyfikaty z tym samym Common Name (CN)
  • Certyfikaty wydane dla tej samej domeny przez różne CA

3. Problemy z magazynem certyfikatów

  • Uszkodzony magazyn certyfikatów
  • Nieprawidłowe uprawnienia dostępu
  • Błędy synchronizacji między magazynami

4. Automatyczne procesy instalacji

  • Skrypty automatyzujące instalację certyfikatów
  • Narzędzia CI/CD próbujące wielokrotnie zainstalować ten sam certyfikat
  • Procesы odnowienia certyfikatów działające równocześnie

Rozwiązania dla użytkowników końcowych {#rozwiązania-użytkownicy}

Windows – Rozwiązanie krok po kroku

Metoda 1 – Przez Zarządzanie Certyfikatami

  1. Otwórz konsolę zarządzania certyfikatami
  • Naciśnij Win + R
  • Wpisz certmgr.msc
  • Naciśnij Enter
  1. Znajdź duplikat certyfikatu –
  • Przejdź do Certyfikaty - Bieżący użytkownikOsobisteCertyfikaty
  • Lub Zaufane główne urzędy certyfikacjiCertyfikaty
  1. Usuń duplikat
  • Znajdź certyfikat o tej samej nazwie lub domenie
  • Kliknij prawym przyciskiem myszy
  • Wybierz Usuń
  • Potwierdź operację
  1. Zaimportuj certyfikat ponownie –
  • Kliknij prawym przyciskiem na folder Certyfikaty
  • Wybierz Wszystkie zadaniaImportuj
  • Postępuj zgodnie z kreatorem

Metoda 2 – Przez PowerShell (dla zaawansowanych)

# Wyświetl wszystkie certyfikaty Get-ChildItem -Path Cert:\CurrentUser\My # Znajdź certyfikat po odcisku palca Get-ChildItem -Path Cert:\CurrentUser\My | Where-Object {$_.Thumbprint -eq "THUMBPRINT_VALUE"} # Usuń certyfikat Get-ChildItem -Path Cert:\CurrentUser\My | Where-Object {$_.Subject -like "*yourdomain.com*"} | Remove-Item 

macOS – Rozwiązanie krok po kroku

Przez Keychain Access

  1. Otwórz Keychain Access
  • Naciśnij Cmd + Spacja
  • Wpisz „Keychain Access”
  • Naciśnij Enter
  1. Znajdź duplikat certyfikatu –
  • W lewym panelu wybierz odpowiedni keychain
  • Przejdź do kategorii Certificates
  • Wyszukaj certyfikat po nazwie lub domenie
  1. Usuń duplikat
  • Kliknij prawym przyciskiem na certyfikat
  • Wybierz Delete
  • Potwierdź hasłem administratora
  1. Zaimportuj certyfikat –
  • Przeciągnij plik certyfikatu do Keychain Access
  • Lub użyj FileImport Items

Linux – Rozwiązanie przez terminal

Ubuntu/Debian

# Wyświetl certyfikaty systemowe sudo ls -la /usr/local/share/ca-certificates/ # Usuń duplikat certyfikatu sudo rm /usr/local/share/ca-certificates/duplicate-cert.crt # Zaktualizuj magazyn certyfikatów sudo update-ca-certificates # Zaimportuj nowy certyfikat sudo cp your-certificate.crt /usr/local/share/ca-certificates/ sudo update-ca-certificates 

CentOS/RHEL

# Lokalizacja certyfikatów ls -la /etc/pki/ca-trust/source/anchors/ # Usuń duplikat sudo rm /etc/pki/ca-trust/source/anchors/duplicate-cert.crt # Zaktualizuj sudo update-ca-trust 

Rozwiązania dla webmasterów i deweloperów {#rozwiązania-deweloperzy}

Apache HTTP Server

Konfiguracja SSL – najlepsze praktyki

# /etc/apache2/sites-available/your-site-ssl.conf <VirtualHost *:443> ServerName yourdomain.com DocumentRoot /var/www/yourdomain SSLEngine on SSLCertificateFile /path/to/your/certificate.crt SSLCertificateKeyFile /path/to/your/private.key SSLCertificateChainFile /path/to/your/chain.crt # Sprawdź czy nie ma duplikujących się dyrektyw # SSLCertificateFile powinno być zdefiniowane tylko raz </VirtualHost> 

Diagnostyka problemów

# Sprawdź konfigurację Apache sudo apache2ctl configtest # Sprawdź załadowane moduły SSL apache2ctl -M | grep ssl # Zrestartuj Apache po zmianach sudo systemctl restart apache2 

Nginx

Konfiguracja SSL

server { listen 443 ssl http2; server_name yourdomain.com; ssl_certificate /path/to/your/fullchain.pem; ssl_certificate_key /path/to/your/private.key; # Dodatkowe ustawienia bezpieczeństwa ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512; ssl_prefer_server_ciphers off; location / { root /var/www/yourdomain; index index.html; } } 

Sprawdzanie konfiguracji

# Test konfiguracji Nginx sudo nginx -t # Przeładuj konfigurację sudo nginx -s reload # Sprawdź status SSL openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 

Node.js / Express.js

Implementacja HTTPS z obsługą błędów

const https = require('https'); const fs = require('fs'); const express = require('express'); const app = express(); // Opcje SSL z obsługą błędów const sslOptions = { key: fs.readFileSync('/path/to/private-key.pem'), cert: fs.readFileSync('/path/to/certificate.pem'), // Opcjonalnie: łańcuch certyfikatów ca: fs.readFileSync('/path/to/chain.pem') }; // Serwer HTTPS z obsługą błędów const server = https.createServer(sslOptions, app); server.on('error', (err) => { if (err.code === 'EADDRINUSE') { console.error('Port 443 jest już zajęty'); } else if (err.message.includes('CERT_ALREADY_EXISTS')) { console.error('Certyfikat już istnieje - sprawdź konfigurację'); } console.error('Błąd serwera HTTPS:', err); }); server.listen(443, () => { console.log('Serwer HTTPS działa na porcie 443'); }); 

Docker i konteneryzacja

Dockerfile z certyfikatami

FROM nginx:alpine # Kopiuj certyfikaty COPY certificates/ /etc/nginx/certs/ # Kopiuj konfigurację nginx COPY nginx.conf /etc/nginx/nginx.conf # Ustaw odpowiednie uprawnienia RUN chmod 600 /etc/nginx/certs/*.key RUN chmod 644 /etc/nginx/certs/*.crt EXPOSE 80 443 CMD ["nginx", "-g", "daemon off;"] 

docker-compose.yml

version: '3.8' services: webserver: build: . ports: - "80:80" - "443:443" volumes: - ./certificates:/etc/nginx/certs:ro - ./nginx.conf:/etc/nginx/nginx.conf:ro environment: - NGINX_HOST=yourdomain.com - NGINX_PORT=443 

Zaawansowane techniki rozwiązywania {#zaawansowane-techniki}

1. Analiza certyfikatów przy użyciu OpenSSL

# Wyświetl szczegóły certyfikatu openssl x509 -in certificate.crt -text -noout # Sprawdź odcisk palca certyfikatu openssl x509 -in certificate.crt -fingerprint -noout # Porównaj dwa certyfikaty diff <(openssl x509 -in cert1.crt -text -noout) <(openssl x509 -in cert2.crt -text -noout) # Sprawdź łańcuch certyfikatów openssl verify -CAfile ca-bundle.crt certificate.crt 

2. Skrypty automatyzujące czyszczenie

Bash script dla Linux

#!/bin/bash # cleanup-duplicate-certificates.sh CERT_DIR="/usr/local/share/ca-certificates" BACKUP_DIR="/tmp/cert-backup-$(date +%Y%m%d)" # Utwórz backup mkdir -p "$BACKUP_DIR" cp -r "$CERT_DIR"/* "$BACKUP_DIR"/ 2>/dev/null || true # Znajdź duplikaty na podstawie odcisku palca declare -A cert_fingerprints duplicates=() for cert_file in "$CERT_DIR"/*.crt; do if [ -f "$cert_file" ]; then fingerprint=$(openssl x509 -in "$cert_file" -fingerprint -noout 2>/dev/null | cut -d= -f2) if [ -n "$fingerprint" ]; then if [ "${cert_fingerprints[$fingerprint]}" ]; then duplicates+=("$cert_file") echo "Znaleziono duplikat: $cert_file" else cert_fingerprints["$fingerprint"]="$cert_file" fi fi fi done # Usuń duplikaty (z potwierdzeniem) for duplicate in "${duplicates[@]}"; do echo "Czy chcesz usunąć duplikat: $duplicate? (y/n)" read -r response if [ "$response" = "y" ]; then rm "$duplicate" echo "Usunięto: $duplicate" fi done # Zaktualizuj magazyn certyfikatów update-ca-certificates echo "Operacja zakończona. Backup dostępny w: $BACKUP_DIR" 

PowerShell script dla Windows

# cleanup-certificates.ps1 param( [string]$StoreName = "My", [string]$StoreLocation = "CurrentUser" ) # Pobierz wszystkie certyfikaty $certificates = Get-ChildItem -Path "Cert:\$StoreLocation\$StoreName" # Grupuj po odcisku palca $groups = $certificates | Group-Object Thumbprint # Znajdź duplikaty $duplicates = $groups | Where-Object { $_.Count -gt 1 } foreach ($group in $duplicates) { Write-Host "Znaleziono duplikaty dla odcisku: $($group.Name)" -ForegroundColor Yellow # Pokaż szczegóły każdego duplikatu $group.Group | ForEach-Object { Write-Host " Subject: $($_.Subject)" -ForegroundColor Gray Write-Host " Issuer: $($_.Issuer)" -ForegroundColor Gray Write-Host " NotAfter: $($_.NotAfter)" -ForegroundColor Gray Write-Host " ---" } # Usuń wszystkie oprócz najnowszego $newest = $group.Group | Sort-Object NotAfter -Descending | Select-Object -First 1 $toRemove = $group.Group | Where-Object { $_ -ne $newest } foreach ($cert in $toRemove) { $confirm = Read-Host "Usunąć certyfikat $($cert.Subject)? (y/n)" if ($confirm -eq 'y') { Remove-Item -Path $cert.PSPath -Force Write-Host "Usunięto certyfikat" -ForegroundColor Green } } } 

3. Monitoring i alerty

Skrypt monitorujący wygasanie certyfikatów

#!/usr/bin/env python3 # certificate-monitor.py import ssl import socket import datetime import smtplib from email.mime.text import MIMEText def check_certificate_expiry(hostname, port=443): """Sprawdza datę wygaśnięcia certyfikatu SSL""" try: context = ssl.create_default_context() with socket.create_connection((hostname, port), timeout=10) as sock: with context.wrap_socket(sock, server_hostname=hostname) as ssock: cert = ssock.getpeercert() # Parsuj datę wygaśnięcia expiry_date = datetime.datetime.strptime(cert['notAfter'], '%b %d %H:%M:%S %Y %Z') days_to_expiry = (expiry_date - datetime.datetime.now()).days return { 'hostname': hostname, 'expiry_date': expiry_date, 'days_to_expiry': days_to_expiry, 'subject': dict(x for x in cert['subject']), 'issuer': dict(x for x in cert['issuer']) } except Exception as e: return {'hostname': hostname, 'error': str(e)} def send_alert(message): """Wysyła alert email""" # Konfiguracja SMTP smtp_server = 'your-smtp-server.com' smtp_port = 587 username = '[email protected]' password = 'your-password' msg = MIMEText(message) msg['Subject'] = 'Alert: Certyfikat SSL wygasa wkrótce' msg['From'] = username msg['To'] = '[email protected]' try: server = smtplib.SMTP(smtp_server, smtp_port) server.starttls() server.login(username, password) server.send_message(msg) server.quit() print("Alert wysłany pomyślnie") except Exception as e: print(f"Błąd wysyłania alertu: {e}") # Lista domen do monitorowania domains = ['yourdomain.com', 'api.yourdomain.com', 'www.yourdomain.com'] for domain in domains: cert_info = check_certificate_expiry(domain) if 'error' in cert_info: print(f"Błąd dla {domain}: {cert_info['error']}") continue print(f"Domena: {cert_info['hostname']}") print(f"Wygasa: {cert_info['expiry_date']}") print(f"Dni do wygaśnięcia: {cert_info['days_to_expiry']}") # Alert jeśli certyfikat wygasa w ciągu 30 dni if cert_info['days_to_expiry'] <= 30: message = f""" UWAGA: Certyfikat SSL dla domeny {cert_info['hostname']} wygasa za {cert_info['days_to_expiry']} dni. Szczegóły: - Domena: {cert_info['hostname']} - Data wygaśnięcia: {cert_info['expiry_date']} - Wydany przez: {cert_info['issuer'].get('organizationName', 'N/A')} Proszę odnowić certyfikat jak najszybciej. """ send_alert(message) print("-" * 50) 

Prewencja i najlepsze praktyki {#prewencja}

1. Zarządzanie certyfikatami w organizacji

Dokumentacja i inwentaryzacja

# Rejestr certyfikatów SSL/TLS | Domena | Typ certyfikatu | Data wygaśnięcia | Wydawca | Lokalizacja | Odpowiedzialny | |--------|----------------|------------------|---------|-------------|----------------| | example.com | Wildcard | 2024-12-01 | Let's Encrypt | Server01 | Jan Kowalski | | api.example.com | Single | 2024-11-15 | DigiCert | LoadBalancer | Anna Nowak | 

Automatyzacja odnowienia

Skrypt cron dla Let’s Encrypt

#!/bin/bash # /etc/cron.d/certbot-renew # Odnów certyfikaty codziennie o 2:30 30 2 * * * root /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx" 

Skrypt PowerShell dla Windows/IIS –

# Scheduled Task dla automatycznego odnowienia $action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File C:\Scripts\renew-certificates.ps1" $trigger = New-ScheduledTaskTrigger -Daily -At "2:00AM" $settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries $principal = New-ScheduledTaskPrincipal -UserID "SYSTEM" -LogonType ServiceAccount Register-ScheduledTask -TaskName "SSL Certificate Renewal" -Action $action -Trigger $trigger -Settings $settings -Principal $principal 

2. Środowiska testowe i staging

Separacja certyfikatów

# docker-compose.yml dla środowisk version: '3.8' services: web-prod: image: nginx:alpine volumes: - ./certs/prod:/etc/nginx/certs:ro environment: - ENVIRONMENT=production profiles: ["prod"] web-staging: image: nginx:alpine volumes: - ./certs/staging:/etc/nginx/certs:ro environment: - ENVIRONMENT=staging profiles: ["staging"] 

3. Backup i recovery

Skrypt backup certyfikatów

#!/bin/bash # backup-certificates.sh BACKUP_DIR="/backup/certificates/$(date +%Y%m%d_%H%M%S)" RETENTION_DAYS=30 mkdir -p "$BACKUP_DIR" # Backup certyfikatów systemowych (Linux) if [ -d "/etc/ssl/certs" ]; then cp -r /etc/ssl/certs "$BACKUP_DIR/system-certs" fi # Backup certyfikatów aplikacji if [ -d "/opt/ssl" ]; then cp -r /opt/ssl "$BACKUP_DIR/app-certs" fi # Backup konfiguracji nginx if [ -f "/etc/nginx/nginx.conf" ]; then cp /etc/nginx/nginx.conf "$BACKUP_DIR/nginx.conf" fi # Backup konfiguracji Apache if [ -d "/etc/apache2/sites-available" ]; then cp -r /etc/apache2/sites-available "$BACKUP_DIR/apache-sites" fi # Usuń stare backupy find /backup/certificates -name "*" -type d -mtime +$RETENTION_DAYS -exec rm -rf {} \; echo "Backup certyfikatów utworzony: $BACKUP_DIR" 

4. Testy i walidacja

Skrypt testujący konfigurację SSL

#!/bin/bash # test-ssl-config.sh DOMAIN="$1" PORT="${2:-443}" if [ -z "$DOMAIN" ]; then echo "Użycie: $0 <domena> [port]" exit 1 fi echo "Testowanie konfiguracji SSL dla $DOMAIN:$PORT" echo "================================================" # Test podstawowy echo "1. Test połączenia SSL..." if openssl s_client -connect "$DOMAIN:$PORT" -servername "$DOMAIN" < /dev/null > /tmp/ssl_test 2>&1; then echo " ✓ Połączenie SSL nawiązane pomyślnie" else echo " ✗ Błąd nawiązywania połączenia SSL" cat /tmp/ssl_test exit 1 fi # Test certyfikatu echo "2. Test ważności certyfikatu..." EXPIRY=$(openssl s_client -connect "$DOMAIN:$PORT" -servername "$DOMAIN" < /dev/null 2>/dev/null | openssl x509 -noout -enddate 2>/dev/null | cut -d= -f2) if [ -n "$EXPIRY" ]; then EXPIRY_TIMESTAMP=$(date -d "$EXPIRY" +%s 2>/dev/null || date -j -f "%b %d %H:%M:%S %Y %Z" "$EXPIRY" +%s 2>/dev/null) CURRENT_TIMESTAMP=$(date +%s) DAYS_TO_EXPIRY=$(( (EXPIRY_TIMESTAMP - CURRENT_TIMESTAMP) / 86400 )) if [ $DAYS_TO_EXPIRY -gt 0 ]; then echo " ✓ Certyfikat ważny jeszcze $DAYS_TO_EXPIRY dni" if [ $DAYS_TO_EXPIRY -lt 30 ]; then echo " ⚠ Ostrzeżenie: Certyfikat wygasa wkrótce!" fi else echo " ✗ Certyfikat wygasł $((DAYS_TO_EXPIRY * -1)) dni temu" fi else echo " ✗ Nie można odczytać daty ważności certyfikatu" fi # Test łańcucha certyfikatów echo "3. Test łańcucha certyfikatów..." if openssl s_client -connect "$DOMAIN:$PORT" -servername "$DOMAIN" -verify_return_error < /dev/null > /dev/null 2>&1; then echo " ✓ Łańcuch certyfikatów jest prawidłowy" else echo " ⚠ Problem z łańcuchem certyfikatów" fi # Test protokołów SSL/TLS echo "4. Test obsługiwanych protokołów..." for protocol in tls1_2 tls1_3; do if openssl s_client -connect "$DOMAIN:$PORT" -servername "$DOMAIN" -$protocol < /dev/null > /dev/null 2>&1; then echo " ✓ $protocol obsługiwany" else echo " - $protocol nie obsługiwany" fi done # Cleanup rm -f /tmp/ssl_test echo "================================================" echo "Test zakończony" 

FAQ – Najczęstsze pytania {#faq}

Q – Czy usunięcie duplikatów certyfikatów jest bezpieczne?

A – Tak, pod warunkiem, że:

  • Zachowasz backup przed usunięciem
  • Upewnisz się, że usuwasz rzeczywisty duplikat, a nie różne certyfikaty
  • Zrestartujesz odpowiednie usługi po zmianach

Q – Jak często powinno się sprawdzać certyfikaty?

A – Zalecamy:

  • Monitoring automatyczny – codziennie
  • Przegląd manualny – raz w miesiącu
  • Pełny audit – raz na kwartał

Q – Co zrobić, jeśli błąd występuje w środowisku produkcyjnym?

A – Plan awaryjny:

  1. Natychmiast utwórz backup obecnej konfiguracji
  2. Sprawdź logi systemowe i aplikacji
  3. Zidentyfikuj duplikat w bezpiecznym środowisku testowym
  4. Wykonaj operacje naprawcze w godzinach o najmniejszym ruchu
  5. Monitoruj system po zmianach

Q – Jak automatyzować zarządzanie certyfikatami w dużej organizacji?

A – Najlepsze rozwiązania:

  • HashiCorp Vault – dla scentralizowanego zarządzania
  • cert-manager w Kubernetes
  • AWS Certificate Manager dla infrastruktury AWS
  • Azure Key Vault dla środowiska Microsoft
  • Własne skrypty automatyzacji z systemem ticketów

Q – Czy mogę zignorować ten błąd?

A – Nie zalecamy ignorowania tego błędu, ponieważ:

  • Może prowadzić do problemów bezpieczeństwa
  • Utrudnia troubleshooting innych problemów SSL
  • Może powodować nieprzewidywalne zachowanie aplikacji

Q – Jak sprawdzić, który certyfikat jest używany przez aplikację?

A – Metody weryfikacji:

# Sprawdzenie certyfikatu w użyciu openssl s_client -connect yourdomain.com:443 -servername yourdomain.com # Sprawdzenie certyfikatu w pliku openssl x509 -in certificate.crt -text -noout # Sprawdzenie wszystkich certyfikatów na serwerze find /etc -name "*.crt" -o -name "*.pem" | xargs -I {} openssl x509 -in {} -noout -subject 2>/dev/null 

Podsumowanie

Błąd ERR_IMPORT_CERT_ALREADY_EXISTS wymaga systematycznego podejścia do rozwiązania. Kluczowe jest:

  1. Prawidłowa identyfikacja przyczyny błędu
  2. Bezpieczne usuwanie duplikatów certyfikatów
  3. Implementacja procesów zapobiegających powstawaniu problemu
  4. Regularne monitorowanie i audyt certyfikatów
  5. Dokumentowanie wszystkich operacji na certyfikatach

Stosowanie przedstawionych w poradniku rozwiązań pomoże w skutecznym zarządzaniu certyfikatami SSL/TLS i unikaniu problemów w przyszłości.

Pamiętaj – Zawsze twórz backup przed wykonywaniem operacji na certyfikatach i testuj zmiany w środowisku nieprodukacyjnym.

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 *