Jak zainstalować certyfikat SSL na serwerze z nginx lub Apache
W skrócie
Skopiuj privkey.pem i fullchain.pem na serwer, wskaż je w konfiguracji nginx (ssl_certificate, ssl_certificate_key) albo Apache (SSLCertificateFile, SSLCertificateKeyFile) i przeładuj serwer.
Dla własnego serwera (VPS albo serwer dedykowany) z nginx lub Apache. Potrzebujesz dostępu do serwera przez SSH i uprawnień administratora (sudo).
Potrzebne pliki
privkey.pem i fullchain.pem.
Wgrywaj certyfikat z trybu produkcyjnego. Certyfikat z trybu testowego służy tylko do sprawdzenia procesu: przeglądarki mu nie ufają, a część paneli w ogóle go nie przyjmie.
Krok po kroku
- Skopiuj oba pliki na serwer. Z Windows najprościej programem WinSCP, a z terminala poleceniem:
scp privkey.pem fullchain.pem uzytkownik@twojserwer:~
- Na serwerze przenieś je do osobnego katalogu i zabezpiecz klucz prywatny:
sudo mkdir -p /etc/ssl/twojadomena sudo mv ~/privkey.pem ~/fullchain.pem /etc/ssl/twojadomena/ sudo chown root:root /etc/ssl/twojadomena/*.pem sudo chmod 600 /etc/ssl/twojadomena/privkey.pem
Na AlmaLinux, Rocky Linux i innych systemach z SELinux dodaj jeszczesudo restorecon -Rv /etc/ssl/twojadomena. Bez tego serwer może nie mieć dostępu do przeniesionych plików. - nginx: w bloku
serverdla Twojej domeny dodaj:listen 443 ssl; ssl_certificate /etc/ssl/twojadomena/fullchain.pem; ssl_certificate_key /etc/ssl/twojadomena/privkey.pem;
Jeśli w bloku jest linialisten [::]:80;, dodaj teżlisten [::]:443 ssl;. Sprawdź konfigurację poleceniemsudo nginx -ti przeładuj serwer:sudo systemctl reload nginx. - Apache: najpierw włącz moduł SSL. Na Debianie i Ubuntu:
sudo a2enmod ssl, potemsudo systemctl restart apache2. Na AlmaLinux i Rocky Linux zainstaluj go:sudo dnf install mod_ssl. W bloku<VirtualHost *:443>dla Twojej domeny dodaj:SSLEngine on SSLCertificateFile /etc/ssl/twojadomena/fullchain.pem SSLCertificateKeyFile /etc/ssl/twojadomena/privkey.pem
Jeśli takiego bloku nie ma, skopiuj blok<VirtualHost *:80>tej domeny, w kopii zmień 80 na 443 i dopisz te trzy linie. Jeśli w bloku jest już liniaSSLCertificateChainFile, usuń ją. Sprawdź konfigurację:sudo apachectl configtest, potem przeładuj serwer:sudo systemctl reload apache2(na AlmaLinux i Rocky Linux:sudo systemctl reload httpd).
Sprawdzenie
Otwórz swoją stronę przez https:// i kliknij kłódkę (albo ikonę ustawień) obok adresu. Szczegóły certyfikatu powinny pokazać wystawcę Let's Encrypt i datę ważności zgodną z panelem. Jeśli przeglądarka nadal pokazuje stary certyfikat, odczekaj kilka minut i odśwież stronę.
Jeśli zamiast strony widzisz ostrzeżenie, kod błędu wyjaśniamy na stronie „Połączenie nie jest prywatne”. Jeśli strona otwiera się przez https, ale wygląda źle albo coś nie działa, zobacz mieszana zawartość. Na koniec włącz przekierowanie z http na https, żeby wszyscy trafiali na bezpieczną wersję.
Dobrze wiedzieć
- Port 443 musi być otwarty w zaporze serwera i u dostawcy. Na Ubuntu z ufw:
sudo ufw allow 443/tcp. Na AlmaLinux i Rocky Linux:sudo firewall-cmd --permanent --add-service=https, potemsudo firewall-cmd --reload. - Apache starszy niż 2.4.8 nie przyjmuje łańcucha w SSLCertificateFile. Wtedy:
SSLCertificateFilewskazuje cert.pem, a dodatkowa liniaSSLCertificateChainFilewskazuje chain.pem. Wersję sprawdzisz poleceniemapachectl -v.
Przy odnowieniu
Wgraj nowe pliki tak samo jak za pierwszym razem: kroki 1 i 2 razem z poleceniami chown i chmod (a na systemach z SELinux także restorecon), bo nowe pliki przynoszą własne uprawnienia. Potem przeładuj serwer (reload). Konfiguracji nie trzeba zmieniać.
Panele hostingów co jakiś czas się zmieniają. Jeśli coś wygląda inaczej niż w opisie, napisz na kontakt@freessl.pl, a poprawimy instrukcję.