Showing posts with label tls. Show all posts
Showing posts with label tls. Show all posts

Saturday, 22 July 2023

Invalid arithmetic operator в Zabbix.


Всем привет.

SSL (TLS) сертификаты стали важным компонентом современной инфраструктуры, поэтому администратору нужно следить за тем, чтобы они не истекали и вовремя их обновлять. Удобно отслеживать срок действия SSL сертификатов на ваших сайтах с помощью системы мониторинга Zabbix.

В ранних версиях Zabbix для мониторинга SSL сертификатов приходилось использовать консольные скрипты, которые передают значения в Zabbix через UserParameter. В Zabbix Agent 2 появись возможность получения информации о сертификате с помощью встроенного плагина WebCertificate. 

Вот здесь рассмотрены оба способа мониторинга срока действия SSL.

По второму способу скажу сразу что скрипт автора /usr/lib/zabbix/externalscripts/sslcert_expiration.sh однозначно рабочий:

#!/bin/bash

data=`echo | openssl s_client -servername $1 -connect $1:${2:-443} 2>/dev/null | openssl x509 -noout -enddate | sed -e 's#notAfter=##'`

ssldate=`date -d "${data}" '+%s'`

nowdate=`date '+%s'`

diffdate="$((${ssldate}-${nowdate}))"

echo $((${diffdate}/86400))

Кстати им же можно проверять сертификаты и на сереверах в локальной сети предприятия.

Но есть нюас.) В Linux без них никуда. При его тестировании на моем сервере Zabbix выскочил глюк на определении diffdate, что ему не делал скрипт тут падал в ошибку: «syntax error: invalid arithmetic operator (error token is «.

Решил я прибегнуть к помощи ChatGPT, сейчас это модно. Далее приведу варианты его решения которые он мне предлагал вчера вечером. Показываю только то те строки где он предлагал изменить в исходном коде для устранения ошибки:

1)

data=$(echo | openssl s_client -servername "$1" -connect "$1":${2:-443} 2>/dev/null | openssl x509 -noout -enddate | awk -F '=' '{print $2}')

2)

diffdate=$((`date -d "$ssldate" '+%s'`- `date -d "$nowdate" '+%s'`))

3)

# Using Python to calculate the difference in seconds

diffdate=$(python -c "from datetime import datetime; print(int((datetime.strptime('$data', '%b %d %H:%M:%S %Y %Z') - datetime.now()).total_seconds()))")

4)

# Retrieve the SSL certificate end date

data=$(echo | openssl s_client -servername "$1" -connect "$1":${2:-443} 2>/dev/null | openssl x509 -noout -dates | grep 'notAfter' | cut -d '=' -f 2)

5)

# Calculate the difference in seconds using 'bc' command

diffdate=$(echo "$ssldate - $nowdate" | bc)


Проверка решений своим поиском по Google привела к тем же вариантам, так что ChatGPT не соврал. Но увы, ни один из способов к успеху не привел. Видно хорошо был сформатирован код моего Zabbix appliance.

Надеюсь вам повезет больше. Удачи.

Версия на печать

Популярное