WordPress HTTPS, SSL & TLS – przewodnik dla administratorów stron internetowych

Opublikowany: 2021-02-01

Gdy odwiedzasz witrynę, Twoja przeglądarka (znana również jako klient ) wysyła żądanie HTTP do serwera WWW. Gdy serwer internetowy wyśle odpowiedź HTTP , przeglądarka może renderować stronę na ekranie. Jednak ruch HTTP ma problem; jest to protokół w postaci zwykłego tekstu. To sprawia, że ​​jest podatny na węszenie i wtrącanie się.

Jeśli atakujący znajduje się w tej samej sieci co Ty, może przechwycić i odczytać ruch HTTP. Mogą również modyfikować zarówno Twoje żądania do serwera, jak i odpowiedzi serwera do Ciebie. Nazywa się to atakiem Man-in-the-Middle (MitM). Może się to łatwo zdarzyć w publicznych sieciach Wi-Fi, na przykład w hotelowych lobby i miejscach publicznych.

Dlatego strona internetowa powinna być na HTTPS – aby ruch nie mógł zostać przechwycony. W tym artykule wyjaśniono, czym są HTTPS, SSL i TLS. Wyjaśnia również, jak skonfigurować witrynę WordPress do pracy z HTTPS.

Spis treści

  • Co to jest SSL i TLS?
  • Co to jest HTTPS?
    • Jak działa HTTPS?
      • Uścisk dłoni TLS
      • Klucze publiczne i prywatne (para kluczy)
  • Czy naprawdę potrzebuję HTTPS w mojej witrynie WordPress?
    • Uzyskanie certyfikatu HTTPS TLS (tzw. certyfikat SSL)
    • HTTPS na współdzielonym i zarządzanym hostingu WordPress
  • Konfiguracja HTTPS WordPress
    • Konfiguracja serwera WWW
    • Konfiguracja adresu URL WordPress do HTTPS
    • Wymuszanie TLS na pulpicie WordPress (wskazówki bonusowe)
  • Dodawanie ścisłych zabezpieczeń transportu HTTP (HSTS)
    • Konfiguracja HSTS na serwerze WWW
    • Szyfry TLS
    • Mój WordPress działa na HTTPS, czy jest bezpieczny?

Co to jest SSL i TLS?

Gdy internet zaczął się rozwijać, stało się oczywiste, że potrzebujemy mechanizmu do bezpiecznego przesyłania informacji między klientem a serwerem bez możliwości podsłuchiwania lub modyfikowania ruchu — wprowadź SSL lub Secure Socket Layer. SSL to protokół bezpieczeństwa internetowego, po raz pierwszy opracowany przez firmę Netscape w 1995 roku w celu rozwiązania tego problemu.

Mówiąc dokładniej, SSL ma na celu osiągnięcie następujących celów:

  • Szyfrowanie — w celu zaszyfrowania ruchu, aby nie mógł zostać przechwycony przez nieuprawnioną osobę trzecią poprzez podsłuchiwanie,
  • Uwierzytelnianie — aby upewnić się, że serwer, z którym rozmawia klient, jest rzeczywiście serwerem, za który się podaje,
  • Integralność — aby zapewnić, że dane przesyłane między klientem a serwerem nie zostaną po drodze zmodyfikowane przez kogoś innego.

Jednak z biegiem czasu analitycy bezpieczeństwa zidentyfikowali szereg problemów związanych z bezpieczeństwem w SSL. Dlatego SSL został zastąpiony przez TLS (protokół Transport Layer Security). Chociaż ukryte różnice między SSL i TLS są drastyczne, cel TLS pozostaje w dużej mierze taki sam.

UWAGA: często możesz zobaczyć SSL w odniesieniu do TLS. SSL jest starszym protokołem i nie jest już bezpieczny w użyciu. Jednak ze względu na jego popularność wiele osób nadal używa SSL jako akronimu, ale mają na myśli TLS .

Co to jest HTTPS?

HTTPS lub Hypertext Transfer Protocol Secure to bezpieczna wersja protokołu HTTP. HTTPS opiera się na Transport Layer Security (TLS), ulepszonym i bezpieczniejszym protokole niż poprzednio używany, Secure Socket Layer (SSL). TLS zapewnia szyfrowanie, uwierzytelnianie i integralność żądań i odpowiedzi HTTPS.

Możesz myśleć o HTTPS jako o HTTP (czyli wersji protokołu w postaci zwykłego tekstu) o żądaniach i odpowiedziach przechodzących przez tunel TLS . Terminem technicznym na to jest enkapsulacja . Należy zauważyć, że TLS może być używany do enkapsulacji innych protokołów, nie tylko HTTP.

Strony internetowe korzystające z protokołu HTTPS można rozpoznać, patrząc na początek adresu URL (zaczynającego się od HTTPS) w pasku nawigacyjnym przeglądarki lub na zieloną kłódkę. Jeśli przeglądasz witrynę przez HTTP, przeglądarki oznaczą ją jako niezabezpieczoną .

Strony HTTP oznaczone jako niezabezpieczone

Jak działa HTTPS?

Gdy żądasz strony internetowej za pomocą protokołu HTTPS, Twoja przeglądarka i serwer sieciowy rozpoczynają proces zwany uzgadnianiem TLS . Uzgadnianie TLS umożliwia klientowi i serwerowi podjęcie decyzji, czy i jak mają się komunikować. W trakcie uzgadniania TLS klient i serwer wykonują następujące czynności:

  • wybrać wersję protokołu TLS, który będzie używany (TLS 1.0, 1.2, 1.3…),
  • uzgodnić, jakich zestawów szyfrów (zestawu algorytmów szyfrowania używanych do nawiązywania bezpiecznej komunikacji) użyć,
  • uwierzytelnić tożsamość serwera,
  • generować klucze szyfrowania do użycia po zakończeniu uzgadniania w celu bezpiecznej komunikacji.

Uścisk dłoni TLS

Podczas uzgadniania TLS serwer wysyła klientowi swój certyfikat, aby klient mógł zweryfikować, czy może uwierzytelnić serwer. Certyfikat jest podobny do paszportu — jest wystawiany przez zaufany urząd centralny zwany Urzędem Certyfikacji (CA), który niezależnie ustala tożsamość witryny, którą może potwierdzić Twoja przeglądarka.

Klucze publiczne i prywatne (para kluczy)

Certyfikat TLS (często nazywany certyfikatem SSL), który serwer WWW wysyła do klienta, zawiera klucz publiczny . Klucz publiczny to jeden z dwóch kluczy specjalnych zwanych parami kluczy . Para kluczy składa się z dwóch kluczy; klucz publiczny i klucz prywatny . Podczas gdy klucz publiczny jest udostępniany klientom, klucz prywatny jest utrzymywany w tajemnicy na serwerze i nigdy nie jest ujawniany. Pary kluczy są sfałszowane razem.

Para kluczy publiczny i prywatny mają szczególnie interesującą relację — bez znajomości klucza prywatnego serwera (jest on tajny i powinien go znać tylko serwer), klient może szyfrować dane za pomocą klucza publicznego serwera, który serwer może odszyfrować za pomocą swojego klucza prywatnego .

Jeśli brzmi to dezorientująco, pomyśl o tym tak, jakby „serwer” wysłał Twojej „przeglądarce” otwartą walizkę (klucz publiczny) zabezpieczoną kłódką — po umieszczeniu czegoś w walizce i zamknięciu kłódki tylko „serwer” z klucz do kłódki (klucz prywatny) można zobaczyć, co jest w środku.

Czy naprawdę potrzebuję HTTPS w mojej witrynie WordPress?

Tak. Bez względu na rodzaj ruchu, który obsługuje Twoja witryna (informacje umożliwiające identyfikację osób, dane posiadacza karty lub zdjęcia kotów), nie ma absolutnie żadnego powodu , dla którego nie powinieneś obsługiwać swojej witryny przez HTTPS.

Przede wszystkim, gdy prowadzisz swoją witrynę internetową na HTTP, hakerzy mogą łatwo ukraść hasła i dane uwierzytelniające WordPress oraz włamać się do Twojej witryny. Mogą to wszystko zrobić za pomocą ogólnodostępnych narzędzi.

Oprócz korzyści związanych z bezpieczeństwem i lepszym doświadczeniem użytkownika, nowy protokół HTTP/2, który oferuje kilka korzyści w zakresie wydajności, nie może być używany bez TLS w przeglądarkach internetowych. Co więcej, HTTPS ma również zalety Search Engine Optimization (SEO) i jest częścią algorytmu rankingu wyszukiwania Google.

Uzyskanie certyfikatu HTTPS TLS (tzw. certyfikat SSL)

Aby skonfigurować HTTPS, będziesz potrzebować certyfikatu TLS, jeśli wszystko ustawiasz samodzielnie. Chociaż zobaczysz dziesiątki płatnych ofert certyfikatów TLS, możesz otrzymać bezpłatny certyfikat TLS od urzędu certyfikacji o nazwie Let's Encrypt. Nie ma absolutnie żadnej różnicy między certyfikatem, który otrzymujesz od Let's Encrypt za darmo, a certyfikatem, za który płacisz.

HTTPS na współdzielonym i zarządzanym hostingu WordPress

Pamiętaj, że w przypadku zarządzanych lub współdzielonych rozwiązań hostingowych Twój dostawca usług hostingowych może, ale nie musi pobierać opłat za dodanie protokołu HTTPS — w takim przypadku, przed wypłatą pieniędzy za certyfikat, zapytaj ich obsługę klienta, czy możesz użyć certyfikatu Let's Encrypt z ich zamiast usługi. Fora społeczności Let's Encrypt są również świetnym źródłem, które może Ci pomóc.

Konfiguracja HTTPS WordPress (wymuszanie TLS w Twojej witrynie WordPress)

Istnieje kilka sposobów egzekwowania TLS w witrynie WordPress w zależności od konfiguracji. W większości przypadków skonfigurujesz swój serwer sieciowy tak, aby przekierowywał cały ruch HTTP do HTTPS (sprawdź generator konfiguracji SSL Mozilli.

Musisz także skonfigurować WordPress do nasłuchiwania przez HTTPS. Możesz to zrobić za pomocą wtyczek, takich jak Really Simple SSL lub WP force SSL. W tym przykładzie zobaczymy, jak to zrobić bez używania dodatkowych wtyczek.

Konfiguracja serwera WWW

Heads-up

  • Zachowaj ostrożność podczas kopiowania/wklejania konfiguracji serwera WWW i upewnij się, że wiesz dokładnie, co robią, zapoznając się z dokumentacją serwera WWW
  • Możesz znaleźć wiele przykładów online, używając albo %{HTTP_HOST} (serwer HTTP Apache), albo $http_host (Nginx) — oba te sposoby mogą sprawić, że Twoja witryna będzie podatna na ataki nagłówka hosta HTTP — zamiast tego wpisz nazwę hosta w konfiguracji, jak pokazano poniżej.

Jeśli używasz Nginx, możesz skonfigurować:

server {
  listen 80;
  server_name example.com www.example.com;
  return 301 https://example.com$request_uri;
}

Alternatywnie, jeśli używasz serwera Apache HTTP Server, możesz skonfigurować następujące elementy:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTPS} off
  RewriteRule ^(.*)$ https://www.example.com%{REQUEST_URI} [L,R=301]
<IfModule>

Konfiguracja adresu URL WordPress do HTTPS

Po włączeniu HTTPS na serwerze internetowym musisz również skonfigurować WordPress. Teoretycznie możesz to zrobić ręcznie: po prostu zmień adres WordPress i adres witryny w ogólnych ustawieniach WordPress. Musisz również przeprowadzić wyszukiwanie i zamianę w bazie danych, aby zmienić wszystkie linki do swojej witryny z HTTP na HTTPS.

[ZRZUT EKRANU]

Najprawdopodobniej więc o wiele łatwiej jest użyć wtyczki do przełączenia witryny WordPress na HTTPS. Możesz użyć popularnej wtyczki, takiej jak Really Simple SSL, aby pomóc Ci przejść przez ten proces.

Wymuszanie TLS na pulpicie WordPress

TLS jest użyteczny tylko wtedy, gdy jest używany. W związku z tym chcesz się upewnić, że Twoja witryna WordPress nie tylko obsługuje protokół TLS, ale także go wymusza. Ponieważ dostęp do pulpitu nawigacyjnego WordPress musi być zawsze dostępny przez HTTPS, WordPress zawiera specjalną opcję konfiguracji FORCE_SSL_ADMIN, którą można ustawić na true w wp-config.php.

define('FORCE_SSL_ADMIN', true);

Heads-up

  • W zależności od ustawień i konfiguracji Twojej witryny (w szczególności, jeśli używasz odwrotnego serwera proxy), może to spowodować, że żądania do pulpitu WordPress wejdą w nieskończoną pętlę przekierowań. Aby uzyskać więcej informacji o tym, jak to naprawić, zapoznaj się z dokumentacją WordPress i zawsze testuj zmiany w środowisku przejściowym przed wdrożeniem ich do produkcji.
  • Ponadto upewnij się, że masz już skonfigurowany i działający protokół TLS, zanim ustawisz FORCE_SSL_ADMIN na true.

WSKAZÓWKA BONUSOWA 1: Dodawanie ścisłych zabezpieczeń transportu HTTP (HSTS)

Chociaż przekierowanie całego ruchu do HTTPS jest świetnym posunięciem, niestety osoby atakujące mogą nadal mieć kilka sztuczek w rękawie. Atak znany jako pasek SSL umożliwiłby atakującemu nakłonienie przeglądarki do przeglądania witryny w HTTP zamiast w bezpiecznym HTTPS, skutecznie pokonując Twoją ciężką pracę.

Aby uzyskać więcej (wysoce technicznych) szczegółów na temat ataków SSL strip, obejrzyj poniższą prezentację Moxie Marlinspike.

W rezultacie przeglądarki implementują teraz HTTP Strict Transport Security lub HSTS. HSTS to nic innego jak prosty nagłówek HTTP, który informuje przeglądarkę, że ta konkretna strona internetowa nigdy nie powinna być dostępna przez HTTP, pokonując wszelkie ataki SSL strip.

Konfiguracja HSTS na serwerze WWW

Heads-up

  • Nie włączaj HSTS, dopóki nie masz pewności co do protokołu HTTPS — wszyscy odwiedzający, którzy otrzymają ten nagłówek HTTP, będą mogli przeglądać Twoją witrynę tylko przez HTTPS
  • Zawsze ustawiaj atrybut max-age — opcjonalnie możesz zdecydować się na ustawienie niskiej wartości przy pierwszym wdrożeniu HSTS (aby ograniczyć potencjalne problemy) i zwiększyć ją, gdy będziesz pewniej korzystać z HSTS

Jeśli używasz Nginx, możesz skonfigurować następujące elementy w ramach bloku serwera nasłuchującego na porcie 443:

# HSTS (ngx_http_headers_module is required) (63072000 seconds)
add_header Strict-Transport-Security "max-age=63072000" always;

Alternatywnie, jeśli korzystasz z serwera Apache HTTP Server, możesz skonfigurować następujące ustawienia w ramach nasłuchiwania VirtualHost na porcie 443:

# HTTP Strict Transport Security (mod_headers is required) 
(63072000 seconds)
Header always set Strict-Transport-Security "max-age=63072000"

Dodatkowa wskazówka 2: Konfigurowanie szyfrów TLS

Aby zapewnić bezpieczeństwo przesyłania danych między przeglądarką a serwerem, obie strony zgadzają się na użycie tak zwanego zestawu szyfrów — kombinacji uwierzytelniania, szyfrowania i algorytmów kodu uwierzytelniania wiadomości (MAC) — do negocjowania ustawień zabezpieczeń , a także do bezpiecznego przesyłania danych.

Niestety, wiele starszych szyfrów ma luki w zabezpieczeniach i nie jest już szczególnie bezpieczne w użyciu. Chociaż decydowanie o tym, które szyfry mają być użyte, jest trudną sprawą, Generator konfiguracji SSL Mozilla sprawia, że ​​wybór zestawu szyfrów TLS, który odpowiada Twoim potrzebom, jest bułką z masłem. Tam, gdzie to możliwe, staraj się korzystać z nowoczesnych lub średniozaawansowanych profili, jednak w zależności od przypadku użycia, zwłaszcza jeśli chcesz obsługiwać starsze przeglądarki lub spełniać wymagania prawne i dotyczące zgodności, może być konieczne użycie nieco innych konfiguracji zestawu szyfrowania.

Jeśli używasz Nginx, możesz skonfigurować następujące szyfry TLS (w oparciu o profil pośredni Mozilla SSL Configuration Generator):

 # intermediate configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES25
6-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDH
E-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;

Alternatywnie, jeśli używasz serwera Apache HTTP Server, skonfiguruj następujące szyfry TLS (w oparciu o profil pośredni Mozilla SSL Configuration Generator):

# intermediate configuration
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder off
SSLSessionTickets off

Możesz także przetestować wynik konfiguracji TLS swojej witryny za pomocą bezpłatnego narzędzia o nazwie SSLabs, aby uzyskać jeszcze więcej informacji technicznych.

Mój WordPress działa na HTTPS, czy jest bezpieczny?

Zielone ikony kłódek i słowa „bezpieczne” obok paska adresu przeglądarki mogą sugerować, że HTTPS to jakaś magiczna różdżka, która rozwiązuje wszystkie problemy związane z bezpieczeństwem witryny. Niestety tak nie jest. Zielona kłódka na pasku przeglądarki

HTTPS to tylko niewielka część bezpieczeństwa WordPress: umożliwia odwiedzającym przeglądanie Twojej witryny przez bezpieczne połączenie . Jednak nie chroni Twojej witryny, jak zapora WordPress, ani nie zwiększa jej bezpieczeństwa. Nie oznacza to również, że jest bezpieczniejszy niż strona internetowa działająca w HTTP. Jak każda inna ochrona bezpieczeństwa, HTTPS pomaga rozwiązać część problemu.

Innymi słowy, chociaż z pewnością powinieneś wdrożyć i egzekwować HTTPS, nie oznacza to, że możesz spać spokojnie i nigdy więcej nie martwić się o bezpieczeństwo. Powinieneś nadal:

  • Dodaj uwierzytelnianie dwuskładnikowe
  • Zainstaluj wtyczkę do monitorowania integralności plików
  • Egzekwuj silne zasady haseł WordPress
  • Prowadź dziennik aktywności WordPress jako zapis wszystkich zmian zachodzących w Twojej witrynie
  • Użyj dobrej zapory.