Let’s Encrypt, ЦентОС 7 и httpd – инсталација, подешавање, ауто-обнова

Уколико желите да вам сајт или веб пројекат буде иза https везе, можете користити бесплатни Let’s Encrypt сертификат. Писао сам о њему раније док још није био у широкој употреби овде а о самој https вези сам зборио на овом линку па бачите поглед. У овом примеру овде, на серверу на којем се налази само Апач (Apache) веб сервер, односно httpd, генерисаћемо и поставићемо Lets Encrypt сертификат, поставити да се сам обнавља (по дифолту траје 3 месеца), поставићемо ажурирање самог LE и проверити коју оцену добијамо на престижном SSL labs-у за целу ову работу.

За овај пример, направио сам тестни VPS на Хецнеру (више овде), направио тестни поддомен test123.kompjuteras.com који пуца на IP адресу овог сервера (А рекорд) и доделио CNAME рекорд www.test123.kompjuteras.com који пуца на test123.kompjuteras.com. Сам Апач је подигнут за потребе овог теста у најосновнијој варијанти без икаквих даљих подешавања, виртуалних хостова и свега осталога, како би имали увид у основну поставку. Сервер је наравно на мени омиљеној, и до сад показало се (бар мени и где год или коме год сам шта радио) перфектној дистрибуцији ЦентОС 7, a сама инсталација, као што до сад и сам преферирам, да буде што више „скриптинг дружељубива“ и са што мање или никакве интеракције…односно, све ово испод што је у командама можете само звекете, без икаквог „Y“ и слично…наравно, само ставите ваш домен и имејл адресу.

LetsEncrypt механизам за креирање и обнову сертификата постоји и у epel репозиторијуму, али ћемо овде користити изворну варијанту јер је примењивија на много већем броју дистрибуција небитно да ли су редхетоиди или питај курац шта. Дакле, ево отприлике инсталације Апач веб сервера у најосновнијој варијанти.


# Сајт са којим ћемо се играти и имејл адреса коју ћемо користити за LE
WEBSAJT="test123.kompjuteras.com"
IMEJL="imejl@mejlserver.kompjuteras.com"

# Инсталација Апач веб сервера, стартовање и постављање аутоматском старта после стартовања сервера
yum -y install httpd
systemctl start httpd
systemctl enable httpd

# Отварање портова за http (80) и https (443) на фајерволу
firewall-cmd --add-service=http
firewall-cmd --add-service=https
firewall-cmd --runtime-to-permanent

# Прављење неког безвезе садржаја за потребе теста
echo "${WEBSAJT} RADI" > /var/www/html/index.html

# Инсталација Гита, Let's Encrypta, сертификата за наш тестни домен и тако то. 
# Иницијално ће бити заустављен веб сервер док се сертификат генерише, отприлике 1 минут
# па ће после бити стартован. Ово обележено жутом је најбитније.
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


# Додавање наших сертификата у конфигурацију вер сервера
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

# Додатна препоручена подешавања базирана на упутству са LetsEncrypt сајта
# 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

# Рестартујемо веб сервер како би преузео ова подешавања
systemctl restart httpd

# Додајемо у кронтаб (crontab) аутоматску обнову сертификата сваког дана у 03:30.
# Ако сертификат још није за обнову, неће се ништа десити сем исписа у лог
(crontab -l 2>/dev/null; echo "30 03 * * * /opt/letsencrypt/letsencrypt-auto renew >> /tmp/le-renew.log") | crontab -

# Додајемо у кронтаб и ажурирање самог LetsEncrypt-a
(crontab -l 2>/dev/null; echo "30 01 * * * cd /opt/letsencrypt && /usr/bin/git pull >> /tmp/le-update.log") | crontab -

Ако одемо на сајт, у овом случају https://test123.kompjuteras.com, видећемо зелени катанац и кликом на њега можемо видети наш сертификат и неке детаље око њега, чији је, кад је направљен, кад истиче и тако то…

Ако одемо на сајт SSL labs-a и лупимо проверу нашег тестног сајта, добићемо оцену А, односно петицу ако смо у средњој школи или 10-тку ако смо на факсу…

Тиме је завршено постављање бесплатног сертификата на нашем серверу уз аутоматску обнову и ажурирање истог у супственој режији. Понављам ово је све у основној инсталацији Апача без икаквих додатних подешавања или виртуалних хостова и на самом серверу, било да је виртуални или физички – али логика је иста и за друге веб сервере, само требате наћи где треба поставити путање до наших сертификата. Ако вам је сајт или веб апликација на неком дељеном хостингу највероватније имате у самом контролном панелу могућност доделе бесплатног сертификата али о томе прозборите са даваоцем хостинг услуге.