Для управления сертификатами использую TinyCA. Недостаток этого решения в том, что об окончании срока действия сертификата узнаешь только тогда, когда он уже окончился.
Чтобы узнавать об этом заранее, я решил набросать небольшой скрипт, который проходится по хранилищу сертификатов и проверяет их "годность" (
TinyCA хранит сертификаты в каталоге ~/.TinyCA/CAName/certs).
Выходит, что для проверки достаточно пройтись по всем ~/.TinyCA/CAName/certs/*.pem файлам. Нагуглил
скрипт на perl, который проверяет срок действия сертификата. Скрипт завершается с кодом 2, если сертификат просрочен, с кодом 1, если истечет в течении двух недель и с нулевым, если с сертификатом все в порядке.
Далее дописал обвязку для крона, который проверяет сертификаты из ~/.TinyCA/CAName/certs
check-certificate-expire - проверка единичного сертификата
#!/bin/sh
openssl_get_CN_from_file() {
if [ ! -f "$1" ]; then
echo "Unable to find file: $1"
return 1
fi
X509_CN=`openssl x509 -in "$1" -noout -subject | perl -pi -e 's/^.*\/?CN=([^\/]*).*$/\1/'`
echo $X509_CN
}
if [ ! -f "$1" ]; then
echo "Unable to find file: $1"
exit 1
fi
check-expire -f /usr/local/etc/check-expire.cfg openssl_x509 -in "$1"
case $? in
1)
X509_CN=`openssl_get_CN_from_file "$1"`
if [ ! -z "$X509_CN" ]; then
echo "$X509_CN: certificate expires soon"
else
echo "$1: certificate expires soon"
fi
;;
2)
X509_CN=`openssl_get_CN_from_file "$1"`
if [ ! -z "$X509_CN" ]; then
echo "$X509_CN: certificate expired!"
else
echo "$1: certificate expired!"
fi
;;
esac
check_tinyca_certs - проверка сертификатов из директории
#!/bin/sh
if [ ! -d "$1" ]; then
echo "Unable to find directory: $1"
exit 1
fi
for sslcert in "$1"/*.pem
do
if [ -f "$sslcert" ]; then
check-certificate-expire "$sslcert"
else
echo "File $sslcert not found"
fi
done
Конфиг для скрипта check-expire
<class default>
<expired>
exit_value 2
</expired>
<window>
inside 2w
exit_value 1
</window>
</class>