Ukoliko želite da vam sajt ili veb projekat bude iza https veze, možete koristiti besplatni Let’s Encrypt sertifikat. Pisao sam o njemu ranije dok još nije bio u širokoj upotrebi ovde a o samoj https vezi sam zborio na ovom linku pa bačite pogled. U ovom primeru ovde, na serveru na kojem se nalazi samo Apač (Apache) veb server, odnosno httpd, generisaćemo i postavićemo Lets Encrypt sertifikat, postaviti da se sam obnavlja (po difoltu traje 3 meseca), postavićemo ažuriranje samog LE i proveriti koju ocenu dobijamo na prestižnom SSL labs-u za celu ovu rabotu.

Za ovaj primer, napravio sam testni VPS na Hecneru (više ovde), napravio testni poddomen test123.kompjuteras.com koji puca na IP adresu ovog servera (A rekord) i dodelio CNAME rekord www.test123.kompjuteras.com koji puca na test123.kompjuteras.com. Sam Apač je podignut za potrebe ovog testa u najosnovnijoj varijanti bez ikakvih daljih podešavanja, virtualnih hostova i svega ostaloga, kako bi imali uvid u osnovnu postavku. Server je naravno na meni omiljenoj, i do sad pokazalo se (bar meni i gde god ili kome god sam šta radio) perfektnoj distribuciji CentOS 7, a sama instalacija, kao što do sad i sam preferiram, da bude što više „skripting druželjubiva“ i sa što manje ili nikakve interakcije…odnosno, sve ovo ispod što je u komandama možete samo zvekete, bez ikakvog „Y“ i slično…naravno, samo stavite vaš domen i imejl adresu.

LetsEncrypt mehanizam za kreiranje i obnovu sertifikata postoji i u epel repozitorijumu, ali ćemo ovde koristiti izvornu varijantu jer je primenjivija na mnogo većem broju distribucija nebitno da li su redhetoidi ili pitaj kurac šta. Dakle, evo otprilike instalacije Apač veb servera u najosnovnijoj varijanti.


# Sajt sa kojim ćemo se igrati i imejl adresa koju ćemo koristiti za LE
WEBSAJT="test123.kompjuteras.com"
IMEJL="imejl@mejlserver.kompjuteras.com"

# Instalacija Apač veb servera, startovanje i postavljanje automatskom starta posle startovanja servera
yum -y install httpd
systemctl start httpd
systemctl enable httpd

# Otvaranje portova za http (80) i https (443) na fajervolu
firewall-cmd --add-service=http
firewall-cmd --add-service=https
firewall-cmd --runtime-to-permanent

# Pravljenje nekog bezveze sadržaja za potrebe testa
echo "${WEBSAJT} RADI" > /var/www/html/index.html

# Instalacija Git-a, Let's Encrypta, sertifikata za naš testni domen i tako to. 
# Inicijalno će biti zaustavljen veb server dok se setrifikat generiše, otprilike 1 minut
# pa će posle biti startovan. Ovo obeleženo žutom je najbitnije.
yum -y install git
git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
systemctl stop httpd ; /opt/letsencrypt/letsencrypt-auto certonly --standalone -d ${WEBSAJT} -d www.${WEBSAJT} --non-interactive --agree-tos -m ${IMEJL} ; systemctl start httpd ; systemctl status httpd


# Dodavanje naših sertifikata u konfiguraciju Apača
sed -i "s|my/path|my/other/path|g" myFileOfPaths.txt
sed -i "s|SSLCertificateFile /etc/pki/tls/certs/localhost.crt|SSLCertificateFile /etc/letsencrypt/live/${WEBSAJT}/cert.pem|g" /etc/httpd/conf.d/ssl.conf
sed -i "s|SSLCertificateKeyFile /etc/pki/tls/private/localhost.key|SSLCertificateKeyFile /etc/letsencrypt/live/${WEBSAJT}/privkey.pem|g" /etc/httpd/conf.d/ssl.conf
sed -i "s|#SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt|SSLCertificateChainFile /etc/letsencrypt/live/${WEBSAJT}/chain.pem|g" /etc/httpd/conf.d/ssl.conf

# Dodatna preporučena podešavanja bazirana na uputstvu sa LetsEncrypt sajta
# https://community.letsencrypt.org/t/recommended-apache-config/58294
sed -i "s|#SSLHonorCipherOrder on|SSLHonorCipherOrder on|g" /etc/httpd/conf.d/ssl.conf
sed -i "s|SSLOptions +StdEnvVars|SSLOptions +StrictRequire|g" /etc/httpd/conf.d/ssl.conf
sed -i s/"#SSLCipherSuite RC4-SHA:AES128-SHA:HIGH:MEDIUM:\!aNULL:\!MD5"/"SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:\!aNULL:\!eNULL:\!EXPORT:\!DES:\!RC4:\!MD5:\!PSK:\!aECDH:\!EDH-DSS-DES-CBC3-SHA:\!EDH-RSA-DES-CBC3-SHA:\!KRB5-DES-CBC3-SHA"/g /etc/httpd/conf.d/ssl.conf

# Restartujemo Apač kako bi preuzeo ova podešavanja
systemctl restart httpd

# Dodajemo u krontab (crontab) automatsku obnovu sertifikata svakog dana u 03:30.
# Ako sertifikat još nije za obnovu, neće se ništa desiti sem ispisa u log
(crontab -l 2>/dev/null; echo "30 03 * * * /opt/letsencrypt/letsencrypt-auto renew >> /tmp/le-renew.log") | crontab -

# Dodajemo u krontab i ažuriranje samog LetsEncrypt-a
(crontab -l 2>/dev/null; echo "30 01 * * * cd /opt/letsencrypt && /usr/bin/git pull >> /tmp/le-update.log") | crontab -

Ako odemo na sajt, u ovom slučaju https://test123.kompjuteras.com, videćemo zeleni katanac i klikom na njega možemo videti naš sertifikat i neke detalje oko njega, čiji je, kad je napravljen, kad ističe i tako to…

Ako odemo na sajt SSL labs-a i lupimo proveru našeg testnog sajta, dobićemo ocenu A, odnosno peticu ako smo u srednjoj školi ili 10-tku ako smo na faksu…

Time je završeno postavljanje besplatnog sertifikata na našem serveru uz automatsku obnovu i ažuriranje istog u supstvenoj režiji. Ponavljam ovo je sve u osnovnoj instalaciji Apača bez ikakvih dodatnih podešavanja ili virtualnih hostova i na samom serveru, bilo da je virtualni ili fizički – ali logika je ista i za druge veb servere, samo trebate naći gde treba postaviti putanje do naših sertifikata. Ako vam je sajt ili veb aplikacija na nekom deljenom hostingu najverovatnije imate u samom kontrolnom panelu mogućnost dodele besplatnog sertifikata ali o tome prozborite sa davaocem hosting usluge.