MYCSS

2020-08-21

renew SSL certificate Let'Script by ACME script (DNS) for Tomcat web server

Я використовую проект OpenMeeting котрий працює на Tomcat web server (Java).
Стала задача використати SSL сертифікати від Let's Encript для OpenMeeting.

Але безкоштовні сертифікати мають особливість, короткий термін життя, і їх періодично потрібно оновлювати. Для звичайних Web серверів, існують скрипти які автоматично спрощують життя.

Для OpenMeeting і відповідно для Tomcat web server, дещо інше рішення так як сховищами ключів та сертифікатів є Java KeyStore.

Для генерації та оновлення сертифікати від Let's Encript є скрипт наш кшталт ACME. Я використовую цей скрипт під операційною системою Ubuntu 18.04 LTS в режимі DNS manual mode.
Для генерації сертифікатів в  DNS режимі в сервері DNS для підконтрольного домену додаються специфічні TXT записи _acme-challenge.
acme.sh --issue -d example.com --dns \
 --yes-I-know-dns-manual-mode-enough-go-ahead-please
 
Add the following txt record:
Domain:_acme-challenge.example.com
Txt value:9ihDbjYfTExAYeDs4DBUeuTo18KBzwvTEjUnSwd32-c


Please add those txt records to the domains. Waiting for the dns to take effect.

acme.sh --renew -d example.com \
 --yes-I-know-dns-manual-mode-enough-go-ahead-please

Після успішного оновлення (acme.sh --renew), у робочій теці скрипта (~/.acme.sh) буде згенерований для кожного домену свій ключ і сертифікат до нього.

Для використання їх з сховищами ключів та сертифікатів в Java KeyStore, треба їх імпортувати до keystore сховища.

Для автоматизації всього процесу був створений скрипт, котрий запускається за розкладом раз на місяць від імені root, де ім'я звичайного користувача у котрого встановлено скрипти - openmeeting.

#!/bin/bash

DOMAIN=example.com
GUSER=openmeeting

HOME=/home/${GUSER}

sudo -u ${GUSER} ${HOME}/.acme.sh/acme.sh --cron --home "${HOME}/.acme.sh"

CMOD=$(stat -c %y ${HOME}/.acme.sh/${DOMAIN}/${DOMAIN}.cer  | cut -d' ' -f1)
CDAT=$(date +"%Y-%m-%d")

echo  "DATE MOD:${CMOD} NOW:${CDAT}"

if [ ! "${CMOD}" == "${CDAT}" ];then
 echo "NOT SAME DATE"
 exit
fi

cd ${HOME}/.acme.sh/${DOMAIN}

KEYSTORE=localhost.jks
STOREPWD=openmeetings
OMSTORE=/opt/openmeeting/conf

rm openmeetings.p12

openssl pkcs12 -export -in ${DOMAIN}.cer -inkey ${DOMAIN}.key -out openmeetings.p12 -name openmeetings -certfile ca.cer
-certfile fullchain.cer -passout pass:${STOREPWD}

rm ${KEYSTORE}

keytool  -importkeystore -srcstorepass openmeetings -srckeystore openmeetings.p12 -srcstoretype PKCS12 -deststorepass ${
STOREPWD} -destkeystore ${KEYSTORE} -alias openmeetings -deststoretype PKCS12
keytool  -import -alias root -keystore ${KEYSTORE} -storepass ${STOREPWD} -trustcacerts -file ca.cer
echo yes | keytool  -import -alias intermed -keystore ${KEYSTORE} -storepass ${STOREPWD} -trustcacerts -file fullchain.c
er

if [ -s "${KEYSTORE}" ];then
 rm  ${OMSTORE}/${KEYSTORE}.bak
 mv  ${OMSTORE}/${KEYSTORE} ${OMSTORE}/${KEYSTORE}.bak
 cp  ${KEYSTORE} ${OMSTORE}/${KEYSTORE}
 ret=$?
 echo "Copy return state: ${ret}"
 if [ "${ret}" -eq 0 ];then
  /etc/init.d/tomcat3 restart
 fi
fi

Скрипт запускає оновлення сертифікатів, перевіряє дату сертифікатів, у випадку коли вони нові, запускає процедуру створення сховища keystore з новими сертифікатами.
У випадку успішного копіювання сховища keystore (localhost.jks) до робочої теки Tomcat сервера, сервер Tomcat презапускається.

Немає коментарів:

Коли забув ти рідну мову, біднієш духом ти щодня...
When you forgot your native language you would become a poor at spirit every day ...

Д.Білоус / D.Bilous
Рабів до раю не пускають. Будь вільним!

ipv6 ready