Рубрики
Uncategorized

Следите за истечением срока действия сертификата HTTPS с помощью этого сценария

Простой сценарий, который вы можете добавить в свой Cron для мониторинга сертификатов HTTPS и когда они истекают. Tagged с SSL, Ruby, Monitoring, DevOps.

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

Теперь мой клиент запускает магазин соков и понятия не имел о том, как веб -сайт технически работает, поэтому я отбросил проблему «вируса», но он сказал, что сайт не может быть доступен Итак, я запустил Firefox в свой телефон и увидел Ваше соединение не безопасно страница.

С тех пор, как Let’s Encrypt вышел из бета -версии, я использовал его, чтобы преобразовать все сайты моих и моих клиентов, чтобы обеспечить соединения через HTTPS. Я установил Cron, как указано Certbot Регулярно обновлять сертификаты, но он время от времени провалился, потому что я не обновлял пакеты Python или что -то в этом роде. Let’s Encrypt достаточно любезны, чтобы отправить почту до истечения срока действия, но начальные установки были сделаны сотрудниками.

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

Все это в то время как люди вокруг меня считали задом наперед с 10.

Не принять на себя обещание

Это был даже не первый раз, когда это происходило, поэтому я решил тогда и там, что я собираюсь решить эту проблему для себя. Я тщательно решил не делать это моей новогодней резолюцией В противном случае я расскажу ту же историю в следующем году.

Итак, 1 января я написал сценарий Ruby (подробнее о том, что через минуту) и продолжал улучшать его, чтобы поймать всевозможные красные флаги с помощью инсталляций HTTPS, в том числе, если сертификат отменяется, затронутым Symantec Mess , является самопоглажным или проходит в прошлом/около даты истечения срока действия, подтверждая цепочку доверия и т. Д. Сценарий в конечном итоге преобразован в красивое маленькое веб -приложение под названием Сертификаты монитора , но давайте вернемся к разговору о сценарии.

Получение сертификата

Первое, что вам нужно сделать, это закупить сертификат из домена. Удивительно, но этого было трудно достичь. Я большой поклонник Httparty За просьбы с Руби, но, к сожалению, я не смог найти способ вернуть сертификаты.

Поэтому я пошел на один слой вниз по абстракции и использовал Net:: http Анкет Чтобы получить сертификат, вы должны запустить

require 'net/http'
require 'openssl'

domain_name = "example.com"

uri = URI::HTTPS.build(host: domain_name)
response = Net::HTTP.start(uri.host, uri.port, :use_ssl => true)
cert = response.peer_cert

Это дает вам объект сертификата в Cert переменная. Эта переменная имеет тип Openssl:: x509:: Сертификат Анкет Они называются X.509 сертификаты , и они являются стандартом для сертификатов открытого ключа.

Сертификаты X.509 дают нам много подробностей о сертификате, в том числе о том, кто его выпустил, когда он был выпущен, когда он истекает, как найти, если он будет отменен, и множество другой полезной информации.

Поиск дат истечения

Чтобы найти дату, когда сертификат будет недействительным, вам просто нужно позвонить cert.not_after . Это возвращает объект времени, который говорит нам, когда срок действия сертификата истекает.

Поэтому, если вы хотите, чтобы вас уведомляли каждый день в течение 2 недель до истечения срока действия сертификата, ваш сценарий будет выглядеть —

require 'net/http'
require 'openssl'

domain_name = "example.com"

uri = URI::HTTPS.build(host: domain_name)
response = Net::HTTP.start(uri.host, uri.port, :use_ssl => true)
cert = response.peer_cert

two_weeks = 14 * 86400 # 14 * One Day

if Time.now + two_weeks > cert.not_after
  # send reminders
end

Напоминать о себе

Вы можете использовать много вещей, чтобы отправить эти напоминания. Теперь я внедрил SMS, электронные письма (для нескольких людей), Slack и Stride In Мое приложение Анкет

У меня есть друзья, которые используют этот скрипт, чтобы подтолкнуть уведомления о мобильных телефонах (с использованием толкателя), веб-уведомлений, обновлений геккобола, добавления в списки дел, добавление к доскам Trello и т. Д. Любая коммуникационная платформа — честная игра.

Например, если вы на Mac, есть аккуратная маленькая команда Вы можете использовать для отправки уведомления себе.

Поэтому я включу эту команду в наш сценарий, чтобы отправить нам уведомления.

require 'net/http'
require 'openssl'

domain_name = "example.com"

uri = URI::HTTPS.build(host: domain_name)
response = Net::HTTP.start(uri.host, uri.port, :use_ssl => true)
cert = response.peer_cert

two_weeks = 14 * 86400 # 14 * One Day

if Time.now + two_weeks > cert.not_after
  time_remaining = (cert.not_after - Time.now)
  days_remaining = time_remaining / 86400

  `osascript -e 'display notification "Certificate for #{domain_name} will expire in #{days_remaining.to_i} days. Please renew soon." with title "#{domain_name}"'`
end

Я удалил Если Условие и запустил сценарий, и выходной выход выглядит сегодня

Теперь все, что вам нужно сделать, это добавить его в свой Crontab, и это будет напоминать вам, когда ваши сертификаты приближаются к обновлению.

Вывод

Очевидно, что сценарий, который я показал вам, не является самой элегантной частью программного обеспечения, но он выполняет работу. Если вы хотите контролировать несколько доменов, просто превратите сценарий в метод и запустите метод по каждому элементу вашего массива domain_names Анкет

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

Я добавил все это и больше в Мое приложение Чтобы помочь сохранить проблемы HTTPS.

Надеюсь, это было полезно для таких людей, как я, которые продолжают нарушать их автоматизацию Let’s Encrypt или забыть о том, что сертификат для обновления, и руководство забыли сказать вам, что они получают почту от поставщиков, чтобы выпустить новое. 😁

Для следующего поста вы хотели бы, чтобы я показал вам, как браузеры определяют, был ли сертификат, который они получают, скомпрометированы или отозваны?

Счастливого кодирования!

Оригинал: «https://dev.to/shobhitic/monitor-your-https-certificate-expiry-with-this-script-1k02»