klink0v (klink0v) wrote,
klink0v
klink0v

Упражнение с OpenSSL

Имеется OpenVPN-сервер с авторизацией клиентов по X509-сертификатам. Пресловутые сертификаты генерируются при помощи скриптов из комплекта EasyRSA и централизованно складываются в некую папку (это поведение EasyRSA по умолчанию). Если прошляпать момент, когда какой-то из клиентских сертификатов протухает, и не сгенерировать ему свеженький, то потом из-за этого творится много попа-боли. Начиная от того, что надо как-то попасть на клиентское устройство минуя NAT и Firewall-ы, заканчивая лучами поноса от пользователя, которому надо типа "срочно-срочно".

Способ решения: хорошо бы самостоятельно своевременно отслеживать предстоящее ещё не свершившееся скорое протухание клиентских сертификатов.

Для этого я написал примитивнейший скрипт на Bash-е, который кладётся в ту же папку, где лежат все сертификаты и запускается по cron-у. Если он обнаруживает в папке сертификат, который протухает в течение ближайших двух недель, то он отправляет об этом электронное письмо.

Комментарии к скрипту.

"sendemail" - легковесный perl-овый консольный мэйлер. В отличие от mutt-а не тянет за собой кучу зависимостей кроме perl-а, который на большинстве систем и так имеется.

Пути стандартных системных утилит на вашей системе могут отличаться от моих.

После вызова "openssl -checkend" приходится также анализировать STDERR, поскольку ненулевой код возврата может свидетельствовать как о том, что сертификат не прошёл проверку, так и о том, что не удалось прочитать соответствующий файл (например, он побитый или не содержит в себе валидного сертификата). На этом месте кидаю маленькую сушёную какашку в программистов openssl-а. Могли хотя бы разные коды возврата для разных случаев сделать.

Sed-ы заменяют в выхлопе OpenSSL-я строку вида subject=vasya на subject='vasya', то есть добавляют апострофы к значению переменной (после знака равенства и в конце строки). Иначе их нормально не прожуёт eval. Да, топорно и некрасиво, зато быстро и практично.

В дальнейшем, если мне будет не лень, а вопрос останется актуальным, скрипт надо будет доработать. Во-первых, чтобы он запоминал насчет каких сертификатов он уже сгенерировал уведомления и не высылать их каждый раз заново. Во-вторых, если сразу несколько сертификатов готовятся протухнуть в один день, то выдать полный перечень в одном письме, а не высылать их всех по одному. Но пока что и так сойдёт.

Tags: bash, linux, openssl, администрирование
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 0 comments