Скрипт для проверки валидности сертификата сервера

Обратились коллеги, скину скрин ошибки соединения с teamwork

надо проверить валидность сертификата

собственный тест сервера ошибки не выявил

как и собственный тест менеджера подключений

обратите внимание, все соединения защищены шифрованием ssl

давайте, напишем простой скрипт на bash для тестирования серификата на каждом подключении снаружи

#!/bin/bash

HOST="имя сервера" # Замените на ваш домен
#PORT="443"
PORT="27001"
DAYS_THRESHOLD=30 # За сколько дней предупреждать об истечении

# 1. Получаем даты окончания сертификата
# -connect: Подключаемся к хосту:порту
# -servername: Указываем SNI (Server Name Indication) для SNI-серверов
# x509 -noout -dates: Извлекаем даты из сертификата
END_DATE_STR=$(openssl s_client -connect $HOST:$PORT -servername $HOST 2>/dev/null | openssl x509 -noout -dates | grep "notAfter")

if [ -z "$END_DATE_STR" ]; then
    echo "Не удалось получить сертификат или ошибка соединения для $HOST"
    exit 1
fi

# Извлекаем дату в формате 'notAfter=...'
END_DATE=$(echo "$END_DATE_STR" | cut -d '=' -f 2)

# 2. Конвертируем дату в секунды с эпохи Unix
# date -d: Парсит дату
# +%s: Выводит в секундах
END_TIMESTAMP=$(date -d "$END_DATE" +%s)
CURRENT_TIMESTAMP=$(date +%s)

# 3. Вычисляем оставшиеся дни
DAYS_LEFT=$(( (END_TIMESTAMP - CURRENT_TIMESTAMP) / 86400 )) # 86400 секунд в дне

echo "Сертификат для $HOST действителен до: $END_DATE ($DAYS_LEFT дней осталось)"

# 4. Проверка на истечение срока
if [ "$DAYS_LEFT" -lt 0 ]; then
    echo "!!! ВНИМАНИЕ: Сертификат для $HOST истек $((-1 * DAYS_LEFT)) дней назад !!!"
elif [ "$DAYS_LEFT" -le "$DAYS_THRESHOLD" ]; then
    echo "!!! ВНИМАНИЕ: Сертификат для $HOST истекает через $DAYS_LEFT дней (менее $DAYS_THRESHOLD) !!!"
else
    echo "Сертификат для $HOST в порядке."
fi

ну и результат выполнения (проверял 443 и 27001 порты)

Отправить
Поделиться
Твитнуть
Запинить