Podpinamy domenę pod Cloudflare - instalacja certyfikatu SSL i TLS, konfiguracja Nginx’a

Poradniki społeczności
cloudflare, ssl, ngnix
pax
pax

Cześć. W tym poradniku zaprezentuję jak poprawnie "podpiąć" swoją domenę pod Cloudflare i skonfigurować certyfikat SSL (full strict) oraz kliencki certyfikat TLS.

Do wyżej wymienionych rzeczy będziemy potrzebować:

  • serwera VPS oraz użytkownika w grupie sudo,
  • domeny (ja zaprezentuje to na przykładzie OVH),
  • konto na Cloudflare.

Instalacja i wstępna konfiguracja serwera WWW - Nginx (Ubuntu) Jeżeli posiadasz już zainstalowany serwer WWW pomiń ten krok.

Aktualizacja pakietów:

sudo apt update

Instalacja pakietów:

sudo apt upgrade

Instalacja Nginx:

sudo apt install nginx

Konfiguracja firewalla:

sudo ufw allow 'Nginx HTTPS'
sudo ufw allow ssh
sudo ufw enable

Konfiguracja strefy DNS domeny Jeżeli Twoja strefa DNS domeny jest skonfigurowana tak by przekierowywała na Twój serwer pomiń ten krok.

  1. W panelu domeny wybieramy "Strefa DNS", następnie znajdujące się w prawym rogu "Dodaj rekord",

strefadns|690x355

  1. Wybieramy pole wskazania "A", a w adresie docelowym podajemy adres IP swojego serwera,
  2. Klikamy "Dalej" i zatwierdzamy,
  3. W rekordach szukamy rekordu "A" z adresem IP nie będącym adresem naszego serwera. Usuwamy ten rekord,
  4. Zmiana ustawień strefy DNSy zajmuje do 24h lecz zazwyczaj dzieje się to o wiele szybciej.

Podpięcie domeny pod Cloudflare

Logujemy się na nasze konto Cloudflare, a następnie przechodzimy pod adres: https://dash.cloudflare.com/. Klikamy "Add a Site".

  1. Podajemy naszą domenę,

domena|478x215

  1. Wybieramy free plan,
  2. Sprawdzamy poprawność rekordów DNS które odczytał Cloudflare z tymi które mamy ustawione w panelu domeny OVH,
  3. Przechodzimy dalej. W tym momencie Cloudflare poprosi nas o zmianę serwerów DNS.

Zmiana serwerów DNS domeny na DNSy Cloudflare

  1. W panelu domeny na OVH przechodzimy do zakładki "Serwery DNS",
  2. Wybieramy opcję "Zmień serwery DNS",

serwerydns|690x193

  1. Serwery DNS z OVH zastępujemy odpowiednio tymi podanymi przez Cloudflare. Klikamy "Zastosuj konfigurację". Zmiana serwerów DNS może zająć do 48h lecz tak jak w przypadku strefy DNS dzieje się to zazwyczaj dużo szybciej,

serwerydcloudflare|591x259

  1. Klikamy "Done, chceck nameservers", a następnie "Finish later",
  2. W momencie zmiany serwerów DNS przechodzimy do kolejnego punktu. Informację o udanej zmianie serwerów DNS dostaniesz na maila przypisanego do konta OVH.

Konfiguracja certyfikatu SSL (full strict)

  1. W panelu domeny w Cloudflare przechodzimy do zakładki "SSL/TLS",

SSL|690x64

  1. Następnie wybieramy "Origin Server" i klikamy "Create Certificate",
  2. Wszystkie ustawienia zostawiamy domyślne. Klikamy "Next",
  3. Przechodzimy na nasz serwer i przenosimy się do katalogu /etc/ssl/certs (cd /etc/ssl/certs/),
  4. W tym katalogu tworzymy folder cloudflare (sudo mkdir cloudflare), a następnie przechodzimy do utworzonego folderu. W utworzonym folderze tworzymy dwa pliki: cert.pem i key.pem (sudo touch cert.pem key.pem),
  5. Otwieramy plik cert.pem wybranym edytorem tekstu i wklejamy do niego cały "Origin Certificate" i zapisujemy (np. sudo nano cert.pem),
  6. Otwieramy plik key.pem wybranym edytorem tekstu i wklejamy od niego cały "Private key" i zapisujemy (np. sudo nano key.pem), Pamiętaj by zapisać gdzieś u siebie na komputerze private key gdyż później nie ma opcji podglądu tego klucza!
  7. Edytujemy domyślny plik konfiguracyjny hosta Nginxa (sudo nano /etc/nginx/sites-available/default), usuwamy wszystko i wklejamy:
server {
        listen 443 ssl default_server;
        listen [::]:443 ssl default_server;
        ssl_certificate /etc/ssl/certs/cloudflare/cert.pem;
        ssl_certificate_key /etc/ssl/certs/cloudflare/key.pem;
        gzip off;
        root /var/www/html;

        index index.html index.htm index.nginx-debian.html;

        server_name twojadomena.pl;

        location / {
                try_files $uri $uri/ =404;
        }
}
  1. Przechodzimy do panelu Cloudflare do "SSL/TLS", a następnie "Overview". Zaznaczamy opcję "Full (strict)". Dalej przechodzimy do zakładki "Edge Certificates" i zaznaczamy "Always Use HTTPS" i "Automatic HTTPS Rewrites" tak by były ON,
  2. Następnie w konsoli wpisujemy:
sudo systemctl reload nginx
  1. Teraz po przejściu na Twoją domenę zauważysz klikając na kłódkę, że Twój certyfikat jest aktywny.

Konfiguracja klienckiego certyfikatu TLS (opcjonalne lecz zalecane)

  1. Pobieramy plik: https://support.cloudflare.com/hc/en-us/article_attachments/360044928032/origin-pull-ca.pem,
  2. Kopiujemy zawartość pliku, a następnie na serwerze w utworzonym folderze tworzymy plik cloudflare.crt (sudo nano /etc/ssl/certs/cloudflare/cloudflare.crt), wklejamy wcześniej skopiowaną zawartość i zapisujemy,
  3. Następnie edytujemy plik konfiguracyjny hosta Nginxa (sudo nano /etc/nginx/sites-available/default) i wklejamy:
ssl_client_certificate /etc/nginx/certs/cloudflare/cloudflare.crt;
ssl_verify_client on;

Ostatecznie nasz plik konfiguracyjny hosta powinien wygląda tak:

server {

        listen 443 ssl default_server;
        listen [::]:443 ssl default_server;
        ssl_certificate /etc/ssl/certs/cloudflare/cert.pem;
        ssl_certificate_key /etc/ssl/certs/cloudflare/key.pem;
        ssl_client_certificate /etc/ssl/certs/cloudflare/cloudflare.crt;
        ssl_verify_client on;
        gzip off;
        root /var/www/html;

        index index.html index.htm index.nginx-debian.html;

        server_name twojadomena.pl

        location / {
                try_files $uri $uri/ =404;
        }
}
  1. Na serwerze reloadujemy Nginxa:
sudo systemctl reload nginx
  1. W zakładce "Orgin Server" w panelu SSL/TLS naszej domeny włączamy "Authenticated Origin Pulls".

To już koniec... od teraz możesz cieszyć się certyfikatem SSL i klienckim TLS!

Jordii
Jordii

pax:

sudo systemctl reload nginx

nie moge cos zainstalowac ngnixa, image|690x373

pax
pax

@Jordii

sudo lsof -i:80

Daj screena co ci wypisze. Możliwe, że masz inną usługę działającą na porcie 80. Dodatkowo z zasady nie powinno się robić takich rzeczy na roocie.

BrixNW
BrixNW

Po co dodawać nowy rekord A do dns na ovh skoro chwilę później i tak całość jest kierowana przez cf?

pax
pax

CF działa jak proxy. W momencie gdy nie dodasz rekordu A z adresem serwera to po wejściu na domenę zobaczysz domyślną stronę domenową z OVH. Bez rekordu A skąd domena miałaby wiedzieć na jaki adres chcesz zrobić przekierowanie?

BrixNW
BrixNW

Ja zawsze dodaje rekordy w CF, a nie tam gdzie mam domenę zarejestrowaną.

Nieznajomy11
Nieznajomy11 Moderator forum.lvlup.pro

pax:

CF działa jak proxy.

Zmieniając serwery DNS na serwery od CF powodujesz, że to teraz w CloudFlare się zarządza strefą DNS. Ustawianie jej chwilę przed przenoszeniem u starego operatora nie ma żadnego sensu.

Podczas "podpinania" domeny system automatycznie pobiera co może, tj. między innymi główny rekord A i je automatycznie migruje (poprzez skopiowanie) do strefy zarządzanej przez CloudFlare. Od tego momentu to, co ustawiłeś w takim OVH nie ma żadnego wpływu na rozwiązywanie DNS.

pax
pax

To i tak na to samo wychodzi.

pax
pax

Jeżeli dodasz rekord A u operatora domeny to Cloudflare sobie to zczyta i będzie działać. Jeżeli tego nie zrobisz to dodasz sobie ten rekord A na Cloudflarze i też będzie działać. To na to samo wychodzi. Nie ma to żadnego znaczenia gdzie to zrobisz.

Nieznajomy11
Nieznajomy11 Moderator forum.lvlup.pro

Ma to duże znaczenie dla potencjalnej osoby, która znajdzie ten poradnik i nie będzie używać OVH. Zależność od tego operatora w tym poradniku jest całkowicie sztuczna i niepotrzebna.

Dodatkowo ja rozumiem, że aktualizacja strefy DNS z OVH jest stosunkowo szybka, ale po co to robić i ryzykować konieczność ponownej modyfikacji już po stronie CF, jak można ten krok całkowicie pominąć?

Ustawienie i weryfikacja po stronie CloudFlare daje znacznie większą pewność poprawnego skonfigurowania domeny niż przeklikanie na oślep, bo "cloudflare sobie to zczyta".