Let’s Encrypt, ЦентОС 7 и httpd – инсталација, подешавање, ауто-обнова
Уколико желите да вам сајт или веб пројекат буде иза https везе, можете користити бесплатни Let’s Encrypt сертификат. Писао сам о њему раније док још није био у широкој употреби овде а о самој https вези сам зборио на овом линку па бачите поглед. У овом примеру овде, на серверу на којем се налази само Апач (Apache) веб сервер, односно httpd, генерисаћемо и поставићемо Lets Encrypt сертификат, поставити да се сам обнавља (по дифолту траје 3 месеца), поставићемо ажурирање самог LE и проверити коју оцену добијамо на престижном SSL labs-у за целу ову работу.
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-тку ако смо на факсу…
Тиме је завршено постављање бесплатног сертификата на нашем серверу уз аутоматску обнову и ажурирање истог у супственој режији. Понављам ово је све у основној инсталацији Апача без икаквих додатних подешавања или виртуалних хостова и на самом серверу, било да је виртуални или физички – али логика је иста и за друге веб сервере, само требате наћи где треба поставити путање до наших сертификата. Ако вам је сајт или веб апликација на неком дељеном хостингу највероватније имате у самом контролном панелу могућност доделе бесплатног сертификата али о томе прозборите са даваоцем хостинг услуге.