<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Воронин: заметки с тегом ssl</title>
<link>https://voronin.one/tags/ssl/</link>
<description>воронин, voronin, it</description>
<author></author>
<language>ru</language>
<generator>Aegea 11.4 (v4171)</generator>

<itunes:subtitle>воронин, voronin, it</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>Скрипт для проверки валидности сертификата сервера</title>
<guid isPermaLink="false">57</guid>
<link>https://voronin.one/all/skript-dlya-proverki-validnosti-sertifikata-servera/</link>
<pubDate>Wed, 24 Dec 2025 18:35:30 +0300</pubDate>
<author></author>
<comments>https://voronin.one/all/skript-dlya-proverki-validnosti-sertifikata-servera/</comments>
<description>
&lt;p&gt;Обратились коллеги, скину скрин ошибки соединения с teamwork&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-83.png" width="800" height="642.95874822191" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;надо проверить валидность сертификата&lt;/p&gt;
&lt;p&gt;собственный тест сервера ошибки не выявил&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-84.png" width="800" height="583.47578347578" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;как и собственный тест менеджера подключений&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-85.png" width="800" height="811.59420289855" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;обратите внимание, все соединения защищены шифрованием ssl&lt;/p&gt;
&lt;p&gt;давайте, напишем простой скрипт на bash для тестирования серификата на каждом подключении снаружи&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="bash"&gt;#!/bin/bash

HOST=&amp;quot;имя сервера&amp;quot; # Замените на ваш домен
#PORT=&amp;quot;443&amp;quot;
PORT=&amp;quot;27001&amp;quot;
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&amp;gt;/dev/null | openssl x509 -noout -dates | grep &amp;quot;notAfter&amp;quot;)

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

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

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

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

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

# 4. Проверка на истечение срока
if [ &amp;quot;$DAYS_LEFT&amp;quot; -lt 0 ]; then
    echo &amp;quot;!!! ВНИМАНИЕ: Сертификат для $HOST истек $((-1 * DAYS_LEFT)) дней назад !!!&amp;quot;
elif [ &amp;quot;$DAYS_LEFT&amp;quot; -le &amp;quot;$DAYS_THRESHOLD&amp;quot; ]; then
    echo &amp;quot;!!! ВНИМАНИЕ: Сертификат для $HOST истекает через $DAYS_LEFT дней (менее $DAYS_THRESHOLD) !!!&amp;quot;
else
    echo &amp;quot;Сертификат для $HOST в порядке.&amp;quot;
fi&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;ну и результат выполнения (проверял 443 и 27001 порты)&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-86.png" width="800" height="57.26872246696" alt="" /&gt;
&lt;/div&gt;
</description>
</item>


</channel>
</rss>