Ta vodnik prikazuje, kako obstoječe potrdilo SSL ročno namestiš na spletni strežnik Apache, na strežniku Linux brez nadzorne plošče, na primer na naših strežnikih KVM VPS. Koraki delujejo v Debianu in Ubuntuju ter v AlmaLinux, Rocky Linux in drugih sistemih na osnovi Red Hat; kjer se razlikujeta, navedemo obe različici.
Ročna nastavitev ni vedno potrebna:
- Na gostovanju cPanel in spletnem gostovanju potrdilo namesti nadzorna plošča (pri Let’s Encrypt samodejno), nastavitev spletnega strežnika se ti ni treba dotikati.
- Če želiš na svoj strežnik brezplačno potrdilo Let’s Encrypt, Certbot opravi pridobitev potrdila, nastavitev Apacheja in podaljšanje.
Ročna namestitev je potrebna, če si kupil plačljivo potrdilo ali si potrdilo dobil drugje in moraš datoteke na strežnik postaviti sam. O vrsti potrdila, pripravi CSR in namestitvi v cPanel na splošno govori naš blogovski zapis o namestitvi potrdila SSL.
Kaj potrebuješ
- Pravice root ali
sudona strežniku. - Apache že deluje, domena pa je dosegljiva prek HTTP (zapis A domene kaže na naslov IP strežnika). Če še ni nameščen, glej: Namestitev Apacheja in PHP-FPM v AlmaLinux 9.
- Vrata 443 so odprta v požarnem zidu (glej: Kako nastavim požarni zid na svojem VPS?).
- Tri datoteke v obliki PEM (besedilni):
- potrdilo domene (na primer
pelda.hu.crt), ki si ga dobil od izdajatelja; - vmesno potrdilo ali CA bundle (na primer
ca-bundle.crt), ki pride s potrdilom; - zasebni ključ (na primer
pelda.hu.key), ki je nastal skupaj s CSR. Tega izdajatelj ne pošlje, ker ga nikoli ni dobil: je tam, kjer si ustvaril CSR (glej: Ustvarjanje CSR in zasebnega ključa).
- potrdilo domene (na primer
Če si potrdilo dobil v obliki PFX ali P7B, ga najprej pretvori v PEM po članku o oblikah potrdil. Datoteka PEM se, odprta v urejevalniku besedil, začne z vrstico -----BEGIN CERTIFICATE----- (pri ključu -----BEGIN PRIVATE KEY-----).
V primerih je domena pelda.hu; ukaze in nastavitve prepiši na svojo domeno.
1. Vklop modula SSL
Debian, Ubuntu: modul SSL (mod_ssl) je del paketa apache2, ločeno ga ni treba nameščati, le vklopiti ga je treba:
sudo a2enmod ssl
AlmaLinux, Rocky Linux, CloudLinux: modul je v ločenem paketu:
sudo dnf install -y mod_ssl
Paket ustvari datoteko /etc/httpd/conf.d/ssl.conf s privzetim navideznim gostiteljem HTTPS, ki uporablja samopodpisano potrdilo, ki ga brskalniki ne sprejmejo. To datoteko pusti (v njej so tudi splošne nastavitve modula), za svojo domeno pa v 3. koraku ustvariš ločeno datoteko.
2. Postavitev datotek
Potrdilo domene in vmesno potrdilo združi v eno datoteko. Vrstni red je pomemben: najprej potrdilo domene, za njim vmesno:
cat pelda.hu.crt ca-bundle.crt > pelda.hu-fullchain.crt
Nato datoteke prekopiraj na običajno mesto v sistemu in nastavi dovoljenja. Zasebni ključ lahko bere le root; Apache ključ prebere ob zagonu, še s pravicami root.
Debian, Ubuntu:
sudo cp pelda.hu-fullchain.crt /etc/ssl/certs/
sudo cp pelda.hu.key /etc/ssl/private/
sudo chown root:root /etc/ssl/private/pelda.hu.key
sudo chmod 600 /etc/ssl/private/pelda.hu.key
AlmaLinux, Rocky Linux, CloudLinux:
sudo cp pelda.hu-fullchain.crt /etc/pki/tls/certs/
sudo cp pelda.hu.key /etc/pki/tls/private/
sudo chown root:root /etc/pki/tls/private/pelda.hu.key
sudo chmod 600 /etc/pki/tls/private/pelda.hu.key
sudo restorecon -Rv /etc/pki/tls
Zadnji ukaz obnovi oznako SELinux datotek. Če datoteke namesto s cp premakneš z ukazom mv (na primer iz svojega imenika), ohranijo staro oznako in jih Apache zaradi SELinuxa ne more odpreti, tudi če so dovoljenja v redu.
Zasebnega ključa ne postavljaj v imenik spletne strani (na primer pod /var/www) in ga ne pošiljaj po e-pošti. Če je vseeno prišel v napačne roke, korake opisuje članek o razkritem zasebnem ključu.
3. Nastavitev navideznega gostitelja HTTPS
Za domeno ustvari novo konfiguracijsko datoteko.
Debian, Ubuntu: /etc/apache2/sites-available/pelda.hu-ssl.conf
AlmaLinux, Rocky Linux, CloudLinux: /etc/httpd/conf.d/pelda.hu-ssl.conf
Vsebina (poti datotek navedi glede na svoj sistem):
<VirtualHost *:443>
ServerName pelda.hu
ServerAlias www.pelda.hu
DocumentRoot /var/www/pelda.hu
SSLEngine on
SSLCertificateFile /etc/ssl/certs/pelda.hu-fullchain.crt
SSLCertificateKeyFile /etc/ssl/private/pelda.hu.key
ErrorLog /var/log/apache2/pelda.hu-ssl-error.log
CustomLog /var/log/apache2/pelda.hu-ssl-access.log combined
</VirtualHost>
V sistemu na osnovi Red Hat je pot potrdila /etc/pki/tls/certs/pelda.hu-fullchain.crt, pot ključa /etc/pki/tls/private/pelda.hu.key, dnevniki pa /var/log/httpd/....
DocumentRoot naj bo enak kot v navideznem gostitelju HTTP (vrata 80), in če so tam še druge nastavitve (blok <Directory>, upravljalnik PHP-FPM), jih prekopiraj tudi sem, sicer spletna stran prek HTTPS deluje drugače.
V starih opisih je še tretja vrstica, SSLCertificateChainFile, s katero je bilo mogoče vmesno potrdilo navesti v ločeni datoteki. Apache jo od različice 2.4.8 šteje za zastarelo; danes vse podprte distribucije Linux ponujajo novejši Apache, zato zadošča, da je vmesno potrdilo v datoteki SSLCertificateFile, za potrdilom domene. Zakaj stran na nekaterih napravah ne deluje, če vmesno potrdilo manjka, razloži članek o vmesnem potrdilu.
Debian, Ubuntu: vklopi novo stran:
sudo a2ensite pelda.hu-ssl
V sistemu na osnovi Red Hat Apache datoteke .conf v imeniku conf.d naloži sam.
Le varni protokoli
SSL 3.0, TLS 1.0 in TLS 1.1 so zastareli in ranljivi (glej: Kakšna je razlika med TLS in SSL?). Osnovna nastavitev današnjih distribucij jih večinoma že ne dovoli, vendar je dobro izrecno dovoliti le TLS 1.2 in TLS 1.3. V Debianu in Ubuntuju v datoteki /etc/apache2/mods-available/ssl.conf, v sistemu na osnovi Red Hat pa v datoteki /etc/httpd/conf.d/ssl.conf poišči vrstico SSLProtocol (če je zakomentirana z znakom #, znak izbriši, če take vrstice ni, jo dodaj) in jo prepiši takole:
SSLProtocol -all +TLSv1.2 +TLSv1.3
V AlmaLinux in Rocky Linux nastavitve šifriranja ureja tudi sistemski kriptografski pravilnik (update-crypto-policies), katerega raven DEFAULT dovoljuje le še TLS 1.2 in novejše. Za podrobno nastavitev šifrirnih algoritmov ti Mozillino orodje SSL Configuration Generator da sodoben vzorec, prilagojen tvoji različici Apacheja in OpenSSL.
4. Preverjanje in ponovni zagon
Preden Apache znova naložiš, preveri sintakso nastavitev:
sudo apachectl configtest
Če je odgovor Syntax OK, znova naloži spletni strežnik:
sudo systemctl reload apache2 # Debian, Ubuntu
sudo systemctl reload httpd # AlmaLinux, Rocky Linux, CloudLinux
Ob prvem vklopu modula je namesto reload potreben restart. Če se Apache ne zažene, vzrok napake pokaže ukaz sudo journalctl -u apache2 -n 50 (v sistemu na osnovi Red Hat -u httpd) oziroma dnevnik napak.
5. Preusmeritev s HTTP na HTTPS
Po namestitvi potrdila je spletna stran dosegljiva tudi prek HTTPS, a naslov http:// deluje še naprej. Obiskovalce in iskalnike lahko v navideznem gostitelju na vratih 80 s trajno preusmeritvijo (301) usmeriš na HTTPS. Vsebino navideznega gostitelja HTTP zamenjaj s tem:
<VirtualHost *:80>
ServerName pelda.hu
ServerAlias www.pelda.hu
Redirect permanent / https://pelda.hu/
</VirtualHost>
Če bi preusmeritev raje uredil v datoteki .htaccess ali te zanimajo koraki, ki sledijo prehodu (notranje povezave, mešana vsebina, Google Search Console), glej: Kako lahko svojo spletno stran preusmerim na HTTPS?. Ko vse dobro deluje, lahko z glavo HSTS brskalnikom tudi naročiš, naj stran že vnaprej odpirajo le prek HTTPS.
6. Preverjanje namestitve
Odpri stran v brskalniku z naslovom https:// in poglej, ali v naslovni vrstici ni opozorila. To pa samo po sebi ni dovolj: brskalniki manjkajoče vmesno potrdilo pogosto dopolnijo sami, drugi programi in starejši telefoni pa ne.
Zanesljivejše je naše brezplačno orodje za preverjanje SSL: pokaže, ali je potrdilo veljavno, za katera imena velja, kdaj poteče in ali je veriga potrdil popolna. Hkrati vnesi naslova pelda.hu, www.pelda.hu, tako v enem koraku preveriš obe različici.
Iz ukazne vrstice z OpenSSL pogledaš, kakšno verigo potrdil pošilja strežnik:
openssl s_client -connect pelda.hu:443 -servername pelda.hu -showcerts </dev/null
Na začetku izpisa morata biti pod Certificate chain navedeni vsaj dve potrdili (domene in vmesno), na koncu pa vrstica Verify return code: 0 (ok).
Pogoste napake
Apache se ne zažene, v dnevniku je napaka AH02565 ali „key values mismatch”. Potrdilo in zasebni ključ ne spadata skupaj, na primer ker je bilo potrdilo zahtevano z drugim, pozneje narejenim CSR. Ali spadata skupaj, preveriš s primerjavo njunih javnih ključev; ukaza morata izpisati isto vrednost:
openssl x509 -in pelda.hu-fullchain.crt -noout -pubkey | openssl sha256
openssl pkey -in pelda.hu.key -pubout | openssl sha256
Če se razlikujeta, poišči ključ, ki pripada potrdilu, ali naredi nov ključ in CSR ter daj potrdilo znova izdati. Pri potrdilu, kupljenem pri aWh, to narediš na portalu za stranke (glej: Nastavitev in ponovna izdaja plačljivega potrdila SSL).
Apache ob zagonu zahteva geslo ali ga ukaz systemctl ne more zagnati. Zasebni ključ je zaščiten z geslom. Na strežniku ključ običajno hranijo brez gesla (zaščito mu dajejo dovoljenja 600), geslo odstraniš takole:
sudo openssl pkey -in pelda.hu.key -out pelda.hu-nopass.key
sudo chmod 600 pelda.hu-nopass.key
Ukaz zahteva geslo ključa in ga brez gesla zapiše v novo datoteko. Nato v vrstici SSLCertificateKeyFile navedi to datoteko, staro pa izbriši.
Stran na nekaterih napravah, v programih ali na telefonih vrne napako potrdila, v brskalniku pa je v redu. Manjka vmesno potrdilo: preveri, ali je v datoteki, ki jo določa SSLCertificateFile, za potrdilom domene tudi vmesno.
Brskalnik potrdila ne vidi kot izdanega za domeno ali kaže samopodpisano potrdilo. Apache za zahtevo uporablja drug navidezni gostitelj. Preveri, ali se ServerName in ServerAlias natančno ujemata z odprtim naslovom (vključno z različico www), in z ukazom sudo apachectl -S poglej, kateri navidezni gostitelji so v kateri datoteki na vratih 443. Pomen sporočil o napakah brskalnikov navaja članek o napaki „Vaša povezava ni zasebna”.
apachectl configtest vrne napako „Invalid command ‘SSLEngine’”. Modul SSL ni vklopljen ali nameščen: zaženi ukaz iz 1. koraka.
Prek HTTPS se brskalnik ne more povezati (iztek časa ali „povezava zavrnjena”), prek HTTP pa stran deluje. Požarni zid ne dovoli vrat 443. V AlmaLinux in Rocky Linux mora biti v izpisu sudo firewall-cmd --list-services storitev https, v Ubuntuju pri uporabi požarnega zidu ufw odprta vrata pokaže ukaz sudo ufw status.
Podaljšanje potrdila
Plačljiva potrdila veljajo največ 200 dni, zato je treba potrdilo med enoletno naročnino vsaj enkrat znova izdati (glej: Zakaj potrdila SSL ne veljajo več eno leto?). Takrat po 2. koraku zamenjaj datoteko potrdila in znova naloži Apache; nastavitev navideznega gostitelja ti ni treba spreminjati, če obdržiš ime datoteke. Če si naredil tudi nov zasebni ključ, zamenjaj tudi tega.
Ročno zamenjavo lahko nadomestiš, če uporabljaš plačljivo potrdilo z naročnino ACME: tega Certbot podaljšuje samodejno enako kot potrdila Let’s Encrypt (glej konec članka o Certbotu). Datum poteka lahko spremljaš po članku o preverjanju poteka potrdila.
Če se med nastavitvijo zatakne, nam piši z imenom domene in sporočilom o napaki.