Как узнать время начала действия и окончания (истечения) сертификата?
echo | openssl s_client -connect google.com:443 2>/dev/null | openssl x509 -noout -dates | cut -d '=' -f2- | xargs -I{} date --date="{}" '+%F %T'
Для того чтобы после взаимодействия с сервером в пакетном режиме openssl завершился необходимо передать ему перевод строки. Иногда можно встретить, что ему передают файл перенаправлением из /dev/null. Оба варианта работают одинаково.
Второй вызов openssl работает уже с полученным через pipe сертификатом и достаёт из него дату начала его дествия и дату окончания действия. Затем командой cut из сертификата извлекается только дата, и наконец дата передаётся в качестве параметра команде date которая из него может сформировать дату в различных форматах.
Как узнать что сетификат истекает чете 30 суток от текущего момента?
В сутках 86400 секунд.
echo | openssl s_client -connect google.com:443 2>/dev/null | openssl x509 -noout -checkend $(( 86400 * 30 )) ; echo $?
Скрипт выведет “1” если сертификат истекает быстрее чем через 30 суток от текущего момента. В противном случае “0”. Помните, что на компьютере где запускается эта команда часы должны показывать верное время.
Вот этот же но модифицированный скрипт. Теперь он выведет дату истечения сертификата если тот закончится быстрее чем через 75 дней.
BEFOREDAYS=75; CERT=`echo | openssl s_client -connect google.com:443 2>/dev/null`; STR=`echo "${CERT}" | openssl x509 -noout -checkend $(( 86400 * BEFOREDAYS ))` ; [ $? -eq 1 ] && { DATE=`echo "${CERT}" | openssl x509 -noout -enddate | cut -d '=' -f2-` ; echo -en "Certificate will expire at "; date --date="${DATE}" '+%F %T'; } Certificate will expire at 2015-11-24 01:00:00
Его можно разместить в cron и если результат не пустой то отправлять емейл администратору.