Посмотреть срок действия сертификата pem в windows

Обновлено: 05.07.2024

Когда CA ( Certificate Authority ) выдает SSL-сертификат, он добавляет к нему дату истечения срока действия, после которой сертификат перестает шифровать сайт. Если сертификат не будет продлен, посетители вашего сайта будут встречены страшным предупреждением о том, что ваше соединение не является частным.

В этой инструкции показано, как проверить дату истечения срока действия сертификата SSL/TLS с помощью OpenSSL живого веб-сайта. А так же как проверить срок самозаверяющего сертификата, файла .p12 и файла сертификата pem.

Проверка срока действия TLS/SSL c помощью OpenSSL

1. Чтобы проверить дату истечения срока действия SSL-сертификата на рабочем веб-сайте, сначала определите и экспортируйте переменные, как показано ниже.

export SITE_URL="site name"

export SITE_SSL_PORT="443"

Затем используйте следующую команду openssl для отображения даты истечения срока действия:

$ openssl s_client -connect $:$ -servername $ 2> /dev/null | openssl x509 -noout -dates

2. Чтобы проверить срок действия самозаверяющего сертификата, введите команду:

$ cat /etc/ssl/certs/nginx.crt | openssl x509 -noout -enddate

Здесь мы проверяем SSL-сертификат, примененный на веб-сервере Nginx.

Параметр notAfter показывает дату истечения. Например, на скриншоте ниже срок действия SSL-сертификата истекает 25 мая 2022 года в 13:47:20 часов.

Найти дату истечения срока действия ssl самозаверяющего сертификата

Найти дату истечения срока действия ssl самозаверяющего сертификата

3. Проверить срок годности из файла сертификата в кодировке pem

$ openssl pkcs12 -in mycert.p12 -nodes | openssl x509 -noout -enddate

4. Чтобы проверить срок действия сертификата PEM, введите:

$ openssl x509 -enddate -noout -in /path/file.pem

Заключение

В этой инструкции показано, как проверить срок годности SSL-сертификата простым и удобным способом с помощью OpenSSL. В большинстве случаев поставщик SSL-сертификата уведомит о предстоящем истечении срока действия сертификата по электронной почте, после чего потребуется продлить срок действия сертификата.

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

В следующих командах используются тестовые файлы со следующими именами:

Обратите внимание на расширения файлов — они могут отличаться от тех, которые используются в других инструкциях. Например, вместо .key и .crt может использоваться расширение .pem. Расширение файла не имеет особого значения кроме как служить подсказкой пользователю, что именно находится в этом файле. Это же самое касается и имён файлов — вы можете выбирать любые имена.

Все эти файлы являются текстовыми:

Там мы увидим примерно следующее:


Если вам эти строки кажутся знакомыми на кодировку Base64, то вы совершенно правы — это она и есть. (Смотрите также «Как быстро узнать и преобразовать кодировку»).

Этот формат, называемый форматом PEM, расшифровывается как Privacy Enhanced Mail.

PEM — это текстовое представление реального двоичного ключа или сертификата в формате DER. Представляет собой двоичного формата DER в кодировке base64 и с дополнительными строками «-----BEGIN PRIVATE KEY-----», «-----BEGIN CERTIFICATE-----» и другими в начале файла и строками «-----END PRIVATE KEY-----», «-----END CERTIFICATE-----» в конце файла.

Мы можем хранить двоичную версию файла только с кодировкой DER, но наиболее распространенным способом является версия PEM.

Вы можете увидеть структуру приватного следующей командой:

Опция -in ИМЯ_ФАЙЛА указывает имя файла ввода для чтения ключа или стандартный ввод, если эта опция не указана. Если ключ зашифрован, будет запрошен пароль.

Опция -text печатает различные компоненты открытого или закрытого ключа в виде простого текста в дополнение к закодированной версии.

Любой формат ключа на самом деле является контейнером для набора длинных чисел. Все остальные данные можно считать «шумом».

Закрытый ключ содержит: модуль (modulus), частный показатель (privateExponent), открытый показатель (publicExponent), простое число 1 (prime1), простое число 2 (prime2), показатель степени 1 (exponent1), показатель степени 2 (exponent2) и коэффициент (coefficient).

Открытый ключ содержит только модуль (modulus) и открытый показатель (publicExponent).

Вы можете из влечь из файла ключей публичный ключ:

По умолчанию выводится закрытый ключ: с опцией -pubout вместо него будет выведен открытый ключ. Эта опция устанавливается автоматически, если ввод является открытым ключом.

Следующая команда покажет информацию о публичном ключе:

По умолчанию из входного файла считывается закрытый ключ. Используемая в предыдущей команде опция -pubin делает так, что вместо приватного ключа читается открытый ключ.

Можно также добавить опцию -noout — с ней будет выведена та же самая информация, но не будет показана кодированная версия ключа.

С такими же опциями, но уже используя команду req, можно изучить содержимое запроса на подпись сертификата:


Информацию о содержимом сертификатов можно посмотреть командой x509 (остальные опции нам уже знакомы):

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

Сертификат (цепочку сертификатов) любого сайта вы можете получить следующей командой (замените w-e-b.site на интересующий вас сайт):


Вы увидите сертификаты (один или несколько), найдите по полю CN тот, который вас интересует, например, сертификат домена w-e-b.site:

И скопируйте содержимое начиная с -----BEGIN CERTIFICATE----- и заканчивая -----END CERTIFICATE-----. Затем сохраните это в файл.

Вы также можете сохранить сертификат центра сертификации и изучить его:


К примеру, сертификат сайта w-e-b.site я сохранил в файл w-e-b.site.crt, для просмотра информации о нём:



Issuer указывает на организацию, которая выдала (подписала) сертификат:

Validity — срок действия сертификата:

Subject: CN — домен (IP адрес) для которого предназначен сертификат:

Поддомены в группе X509v3 extensions → X509v3 Subject Alternative Name (подробности чуть позже):

Теперь бегло рассмотрим расширения X.509.

Расширение Basic Constraints используется для маркировки сертификатов как принадлежащих ЦС, давая им возможность подписывать другие сертификаты. В сертификатах, отличных от CA, это расширение будет либо пропущено, либо будет установлено значение CA, равное FALSE. Это расширение является критическим, что означает, что все программные сертификаты должны понимать его значение.

Расширения Key Usage (KU) и Extended Key Usage (EKU) ограничивают возможности использования сертификата. Если эти расширения присутствуют, то разрешены только перечисленные варианты использования. Если расширения отсутствуют, ограничений на использование нет. То, что вы видите в этом примере, типично для сертификата веб-сервера, который, например, не позволяет подписывать код:

Расширение CRL Distribution Points перечисляет адреса, по которым можно найти информацию о списке отзыва сертификатов (CRL) ЦС. Эта информация важна в случаях, когда сертификаты необходимо отозвать. CRL — это подписанные CA списки отозванных сертификатов, публикуемые через регулярные промежутки времени (например, семь дней).

Расширение Certificate Policies используется для указания политики, в соответствии с которой был выпущен сертификат. Например, именно здесь можно найти индикаторы расширенной проверки (EV). Индикаторы представлены в форме уникальных идентификаторов объектов (OID) и являются уникальными для выдающего ЦС. Кроме того, это расширение часто содержит один или несколько пунктов CPS, которые обычно являются веб-страницами или документами PDF.

Расширение Authority Information Access (AIA) обычно содержит две важные части информации. Во-первых, он перечисляет адрес ответчика CA OCSP, который можно использовать для проверки отзыва сертификатов в режиме реального времени. Расширение также может содержать ссылку, где находится сертификат эмитента (следующий сертификат в цепочке). В наши дни серверные сертификаты редко подписываются непосредственно доверенными корневыми сертификатами, а это означает, что пользователи должны включать в свою конфигурацию один или несколько промежуточных сертификатов. Ошибки легко сделать, и сертификаты будут признаны недействительными. Некоторые клиенты (например, Internet Explorer) будут использовать информацию, представленную в этом расширении для исправления неполной цепочки сертификатов, но многие клиенты этого не сделают.

Расширения Subject Key Identifier и Authority Key Identifier устанавливают уникальные идентификаторы ключа субъекта и ключа авторизации соответственно. Значение, указанное в расширении Authority Key Identifier сертификата, должно соответствовать значению, указанному в расширении Subject Key Identifier в выдающем сертификате. Эта информация очень полезна в процессе построения пути сертификации, когда клиент пытается найти все возможные пути от конечного (серверного) сертификата до доверенного корня. Центры сертификации часто используют один закрытый ключ с несколькими сертификатами, и это поле позволяет программному обеспечению надёжно определять, какой сертификат может быть сопоставлен с каким ключом. В реальном мире многие цепочки сертификатов, предоставляемые серверами, недействительны, но этот факт часто остаётся незамеченным, поскольку браузеры могут находить альтернативные пути доверия.

Наконец, расширение Subject Alternative Name используется для перечисления всех имен хостов, для которых действителен сертификат. Это расширение раньше было необязательным; если его нет, клиенты возвращаются к использованию информации, представленной в Common Name (CN), которое является частью поля «Subject». Если расширение присутствует, то содержимое поля CN игнорируется во время проверки.

Рассмотрим опции команды x509, которые позволяют извлечь разнообразную информацию из сертификатов.

Чтобы показать издателя сертификата используйте опцию -issuer:

Для показа отпечатка сертификата:

Чтобы вывести сертификат в виде строки символов в стиле C — char, используйте опцию -C:

Чтобы вывести расширения сертификата в текстовой форме, используйте опцию -ext. Несколько расширений можно перечислить через запятую, например "subjectAltName,subjectKeyIdentifier". Чтобы посмотреть весь список расширений:

Пример команды для вывода альтернативных имён в домене:

Пример информации об альтернативных именах домена:

Для вывода почтовых адресов, содержащихся в сертификате, используйте опцию -email. Адреса электронной почты могут отсутствовать в сертификате.

Для вывода адресов респондентов OCSP, если они присутствуют в сертификате, укажите опцию -ocsp_uri:

Для показа дат из сертификата имеются следующие опции:

  • -startdate: Распечатывает дату начала сертификата, то есть дату notBefore (не ранее).
  • -enddate: Распечатывает дату истечения срока действия сертификата, то есть дату notAfter (не позднее).
  • -dates: Распечатывает даты начала и окончания срока действия сертификата.

Для вывода имени subject укажите опцию -subject:

Чтобы показать имя subject сертификата в форме RFC2253 используйте сочетание опций -subject -nameopt RFC2253:

Пример вывода имени subject сертификата в форме схемы на терминале, поддерживающем UTF8:

Опция -serial выводит серийный номер:

Чтобы извлечь публичный ключ из сертификата используйте опцию -pubkey:

Для глубокого понимания OpenSSL смотрите также полное руководство: «OpenSSL: принципы работы, создание сертификатов, аудит».

SSL-сертификат безопасности — для сайта вещь нужная и полезная. Но, как и все полезные вещи, имеет свой срок годности: два года. Еще относительно недавно можно было встретить сертификаты, выданные на срок три, а то и пять лет. За последнее время требования CA/B Forum — регулирующего органа отрасли сертификации, — существенно ужесточились, и срок действия сертификата не превышает двух лет. Это мотивировано повышением требований по безопасности пользователей в интернете. Как для различных транзакций, так и для простого интернет-серфинга.

Если истек срок действия сертификата безопасности, то сертификат «переходит на темную сторону». А последствия этого весьма и весьма серьезны для владельцев сайтов.

Как проверить срок действия SSL-сертификата

Чем грозит истекший срок действия SSL-сертификата?

Браузер Chrome выдаст вот такую заставку и не пропустит пользователя дальше:

Предупреждение про устаревший SSL-сертификат в браузере Chrome

Предупреждение про устаревший сертификат в браузере Chrome

Согласитесь, не самое желанное предупреждение для пользователей.

А у браузера Firefox заставка будет еще более мрачной:

Попытка зайти на сайт с устаревшим SSL-сертификатом в браузере Firefox

Попытка зайти на сайт с устаревшим сертификатом в браузере Firefox

Мало кто из пользователей начнет разбираться в серьезности таких предупреждений. Скорее всего, они просто не посетят ресурс.

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

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

Снимки экрана выше — это, по-сути, проверка SSL-соединения и тест SSL-сертификата на пригодность. Чтобы его выполнить, достаточно просто зайти в современном браузере на свой ресурс. Но это поверхностная проверка. Причем проверка пост-фактум, когда сбой уже произошел.

Как заранее проверить сертификат SSL, чтобы быть уверенным в его пригодности? Читаем дальше!

Файловая проверка SSL-сертификата сайта

Сертификат сайта это всего лишь файл с текстовым наполнением. Первое, что приходит в голову, открыть файл и посмотреть его содержимое. Но не все так просто. Внутри файла вы увидите примерно следующее:

Пример содержимого файла сертификата безопасности

Пример содержимого файла сертификата безопасности

Даже если сталкивались с подобной кодировкой (base64), пытаться раскодировать не стоит — внутри закодирована бинарная структура, разбор которой потребует весьма нетривиальных усилий.

Решается эта задача весьма просто: обычным двойным кликом по файлу. CRT формат далеко не новое изобретение и многие операционные системы его поддерживают и позволяют просмотреть данные. Вот такой результат будет на MS Windows:

Окно свойств файла сертификата безопасности в MS Windows 10

Окно свойств файла сертификата безопасности в MS Windows 10

На Ubuntu Linux будет похожее окно с детализацией свойств сертификата:

Просмотр свойств SSL-сертификата в Ubuntu Linux


Просмотр свойств сертификата в Ubuntu Linux

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

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

Проверка сертификата SSL на сайте — процедура еще более простая. Для этого воспользуемся браузером Chrome и зайдем на проверяемый ресурс. Нажатие на значок замка в адресной строке выдаст выпадающее меню, в котором фраза «Connection is secure» означает, что проверка SSL-соединения прошла успешно, а фраза «Certificate (valid)» свидетельствует о корректности самого сертификата:

Как проверить SSL-сертификат сайта, используя браузер Chrome

Как проверить SSL-сертификат сайта, используя браузер Chrome

Чтобы узнать точную дату истечения срока сертификата, нужно нажать на пункт меню «Certificate (valid)» и в появившемся окне будет информация про срок годности:

Как проверить SSL-сертификат на сайте и его срок годности в браузере Chrome


Как проверить SSL-сертификат на сайте и его срок годности в браузере Chrome

На самом деле браузер скачивает файла сертификата с вашего ресурса и анализирует его.

Для проверки можно использовать и другие браузеры. Только в них оформление окошек проверки сертификата будет немного отличаться от Chrome.

Как обновить SSL-сертификат сайта

Если срок действия сертификата истек или проверка показывает некорректность сертификата (такое тоже возможно, если обслуживанием сайта занимались не профессионально), то необходимо его обновить. Сделать это можно на нашем сайте . На сайте есть детальные инструкции по всему процессу обновления сертификата безопасности, также там можно заказать тест SSL-сертификата.

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

Если у меня есть фактический файл и оболочка Bash в Mac или Linux, как я могу запросить файл сертификата, когда он истечет? Не веб-сайт, а сам файл сертификата, если у меня есть файлы csr, key, pem и chain.

Результат находится в форме:

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

Я сделал сценарий bash, связанный с тем же, чтобы проверить, истек ли срок действия сертификата или нет. При необходимости вы можете использовать то же самое.

Скрипт

ReadMe

Если (по какой-то причине) вы хотите использовать приложение с графическим интерфейсом в Linux, используйте gcr-viewer (в большинстве дистрибутивов он устанавливается пакетом gcr (в противном случае в пакете gcr-viewer ))

Для MAC OSX (El Capitan) У меня сработала эта модификация примера Николаса.

MacOS не нравились флаги --date= или --iso-8601 в моей системе.

То же, что и принятый ответ, но обратите внимание, что он работает даже с файлом .crt , а не только с файлом .pem , на всякий случай, если вы не можете найти местоположение файла .pem .

Одна строка проверяет истинность / ложь, если срок действия сертификата домена истечет через некоторое время (например, 15 дней):

Вот функция bash, которая проверяет все ваши серверы, если вы используете циклический перебор DNS. Обратите внимание, что для этого требуется дата GNU и не будет работать в Mac OS.

Вот моя командная строка bash, в которой перечислены несколько сертификатов в порядке их истечения, последний из которых истекает первым.

Если вы просто хотите узнать, истек ли срок действия сертификата (или истечет ли это в течение следующих N секунд), опция -checkend <seconds> для openssl x509 сообщит вам:

Это избавляет от необходимости самостоятельно сравнивать дату и время.

openssl вернет код выхода 0 (ноль), если срок действия сертификата не истек, и не будет делать это в течение следующих 86400 секунд, как в примере выше. Если срок действия сертификата истек или уже истек - или если возникла другая ошибка, например, недопустимый / несуществующий файл - код возврата: 1 .

date

02.02.2021

directory

PowerShell, Windows 10, Windows Server 2016

comments

комментария 4

Неожиданное истечение срока действия сертификата сервера может вызвать ряд неприятных последствий для ваших клиентов: невозможность установить безопасное подключение, ошибки аутентификации, назойливые предупреждения в браузере и т.д. В этой статье мы покажем, как с помощью PowerShell проверить срок действия SSL/TLS сертификатов на удаленных сайтах, а также истекающих сертификатах в хранилищах сертификатов на серверах и компьютерах домена.

Проверка срока действия SSL сертификата на веб-сайтах в Интернете с помощью PowerShell

В следующем PowerShell скрипте нужно указать список сайтов, на которых нужно проверять срок действия сертификата, а также за сколько дней до окончания действия сертификата начинать показывать уведомления ($minCertAge). В качестве примера я указал 80 дней.

Данный PowerShell скрипт проверит SSL сертификаты для всех сайтов из списка. Если обнаружится сертификат, который скоро просрочится, он будет выдел в предупреждении.

powerhell скрипт для проверки истекающих SSL сертфикатов на HTTPS сайтах

Для оповещения администратора о приближающемся сроке истечения SSL сертификата можно добавить всплывающее уведомление. Для этого раскоментируйте строку ShowNotification $messagetitle $message и добавьте функцию:

Function ShowNotification ($MsgTitle, $MsgText) Add-Type -AssemblyName System.Windows.Forms
$global:balmsg = New-Object System.Windows.Forms.NotifyIcon
$path = (Get-Process -id $pid).Path
$balmsg.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon($path)
$balmsg.BalloonTipIcon = [System.Windows.Forms.ToolTipIcon]::Warning
$balmsg.BalloonTipText = $MsgText
$balmsg.BalloonTipTitle = $MsgTitle
$balmsg.Visible = $true
$balmsg.ShowBalloonTip(10000)
>

уведомление windows о просрачивающемся сертфикате

Поиск истекающих сертификатов в хранилище сертификатов Windows

Также вам может понадобится скрипт, который будет мониторить срок действия сертификатов, используемых для криптографических службах на серверах (например сертификаты на RDS, Exchange, SharePoint, LDAPS и т.д) или компьютерах пользователей.

На локальном компьютере вы можете получить список сертификатов, которые скоро просрочатся с помощью команды Get-ChildItem -Path cert . В Powershell 3.0 есть специальный аргумент -ExpiringInDays :

Get-ChildItem -Path cert: -Recurse -ExpiringInDays 30

В PowerShell 2.0 аналогичная команда выглядит так:

Чтобы проверить только собственные сертификаты, используйте контейнер Cert:\LocalMachine\My вместо корневого Cert: . Так вы не будете проверять корневые сертификаты Windows и коммерческие сертификаты.

Чтобы найти сертификаты, которые истекают в течении следующих 30 дней на всех серверах домена, можно использовать такой PowerShell скрипт:

$servers= (get-adcomputer -LDAPFilter "(&(objectCategory=computer)(operatingSystem=Windows Server*) (!serviceprincipalname=*MSClusterVirtualServer*) (!(userAccountControl:1.2.840.113556.1.4.803:=2)))").Name
$result=@()
foreach ($server in $servers)
$ErrorActionPreference="SilentlyContinue"
$getcert=Invoke-Command -ComputerName $server < Get-ChildItem -Path Cert:\LocalMachine\My -Recurse -ExpiringInDays 30>
foreach ($cert in $getcert) $result+=New-Object -TypeName PSObject -Property ([ordered]@'Server'=$server;
'Certificate'=$cert.Issuer;
'Expires'=$cert.NotAfter
>)
>
>
Write-Output $result

powerhsell скрипт для поиска сертфикатов, которые скоро просрочатся на компьютерах домена

Итак, вы получите список истекающих сертификатов на серверах и у вас будет достаточно времени для их продления.

Читайте также: