Пользователям Windows все более тщательное внимание стоит уделать установленным на компьютере сертификатам. Недавние скандалы с сертификатами Lenovo Superfish, Dell eDellRoot и Comodo PrivDog лишний раз свидетельствуют о том, что пользователю нужно быть внимательным не только при установке новых приложений, но и четко понимать, какое ПО и сертификаты предустановлены в системе производителем оборудования. Через установку поддельных или специально сгенерированных сертификатов злоумышленники могут осуществить атаки MiTM (man-in-the-middle), перехватывать трафик (в том числе HTTPS), разрешать запуск вредоносного ПО и скриптов и т.п.
Как правило такие сертификаты устанавливаются в хранилище доверенных корневых сертификатов Windows (Trusted Root Certification Authorities). Разберемся, каким образом можно проверить хранилище сертификатов Windows на наличие сторонних сертификатов.
В общем случае в хранилище сертификатов Trusted Root Certification Authorities должны присутствовать только доверенные сертификаты, проверенные и опубликованные Microsoft в рамках программы Microsoft Trusted Root Certificate Program. Для проверки хранилища сертификатов на наличия сторонних сертификатом можно воспользоваться утилитой Sigcheck (из набора утилит Sysinternals).
- Скачайте утилиту Sigcheck с сайта Microsoft (https://technet.microsoft.com/ru-ru/sysinternals/bb897441.aspx)
- Распакуйте архив Sigcheck.zip в произвольный каталог (например, C:installsigcheck)
- Откройте командную строку и перейдите в каталог с утилитой: cd C:installsigcheck
- В командной строке выполните команду
sigcheck.exe–tv
, или
sigcheck64.exe –tv
(на 64 битных версиях Windows) - При первом запуске утилита sigcheck попросит принять условия использования
- После этого утилита скачает с сайта Microsoft и поместит свой каталог архив authrootstl.cab со списком корневых сертификатов MS в формате Certification Trust List.
- Утилита сравнит список сертификатов установленных на компьютере со списком корневых сертификатов MSFT в файле authrootstl.cab. В том случае, если в списке коревых сертификатов компьютера присутствуют сторонние сертификаты, SigCheck выведет их список. В нашем примере на компьютере имеется один сертификат с именем test1 (это самоподписанный сертификат созданный с помощью командлета New-SelfSignedCertificate, который я создавал для подписывания кода PowerShell скрипта)
- Каждый найденный сторонний сертификат стоит проанализировать на предмет необходимости его присутствуя в списке доверенных. Желательно также понять какая программа установила и использует его.
Совет. В том случае, если компьютер входит в домен, скорее всего в списке «сторонних» окажутся корневые сертификаты внутреннего центра сертификации CA, и другие сертификаты, интегрированные в образ системы или распространенные групповыми политиками, которые с точки зрения MSFT могут оказаться недоверенными.
- Чтобы удалить данный сертификат их списка доверенных, откройте консоль управления сертификатами (msc) и разверните контейнер Trusted Root Certification Authorities (Доверенные корневые центры сертификации) -> Certificates и удалите сертификаты, найденные утилитой SigCheck.
Таким образом, проверку хранилища сертификатов с помощью утилиты SigCheck стоит обязательно выполнять на любых системах, особенно на OEM компьютерах с предустановленной ОС и различных сборках Windows, распространяемых через популярные торрент-трекеры.
Те из пользователей, которые следят за новинками из мира компьютерной техники, хорошо помнят разразившийся пару лет назад скандал, связанный поставляемой с некоторыми моделями ноутбуков Lenovo программы Superfish, представляющей собой типичный Malware. Установив в хранилище ключей Windows свой сертификат, это зловредное приложение перехватывало трафик, анализировало пользовательские запросы и вставляло на страницы веб-сайтов «нужную» рекламу.
К слову, подобные случаи не так уже и редки, можно привести массу и других примеров, в которых инсталлируемое программное обеспечение, с виду совершенно безопасное, устанавливало или подменяло корневые сертификаты. Все это еще раз говорит о том, что при установке новых приложений не помешало бы проявлять осторожность, также важно понимать какие программы и сертификаты предустановлены в системе самим производителем компьютерной техники.
Поддельные и сторонние сертификаты могут выполнять те же задачи, что и Malware, поэтому время от времени не мешало бы проверять хранилище Windows (Trusted Root Certification Authorities) на предмет наличия таких ключей. Давайте же разберемся, как это можно сделать. Для этого вам понадобится специальная утилита Sigcheck, входящая в набор инструментов системного администратора Sysinternals.
Скачайте архив с утилитой с официального сайта technet.microsoft.com/ru-ru/sysinternals/bb897441.aspx и распакуйте в любое удобное расположение, в нашем случае это папка C:Sigcheck. Откройте от имени администратора командную строку, перейдите в каталог с исполняемым файлом утилиты, а затем выполните такую команду:
sigcheck.exe -tv или sigcheck64.exe -tv на 64-битных системах
Если утилита запросит подтверждение, нажмите в открывшемся окошке «Agree».
После этого Sigcheck должна загрузить с сайта Microsoft файл authrootstl.cab со списком доверенных сертификатов и поместить его в папку со своим исполняемым файлом. Если этого не произойдет, скачайте файл самостоятельно по ссылке yadi.sk/d/5c6Mp2Xy3GTFLG и забросьте его в каталог с утилитой Sigcheck, а приведенную выше команду выполните еще раз.
В процессе выполнения команды утилита сравнит установленные в системе сертификаты с теми, которые в списке архива authrootstl.cab. Если на компьютере будут выявлены сторонние или недоверенные сертификаты, программка выведет их список в командной строке.
Впрочем, это еще не означает, что сторонние сертификаты нужно немедленно удалять.
Важно понять, какая именно программа его установила и использует. К примеру, в нашем случае сертификат «avast! Web/Mail Shield Root» используется антивирусом Avast, поэтому удалять его не нужно.
Если сертификат не вызывает у вас доверия, равно как и установленная некогда программа, можете удалить его.
Для этого откройте командой MMC консоль оснастки, в меню «Файл» выберите команду «Добавить или удалить оснастку».
В левой колонке открывшегося окошка выделите мышкой «Сертификаты», нажмите кнопку «Добавить», затем «OK».
После того как в окне появится список сертификатов, разверните в левой колонке каталог «Доверенные корневые центры сертификации» и удалите найденные в Sigcheck сертификаты.
Загрузка…
Данный материал является переводом оригинальной статьи «ATA Learning : Michael Soule : Manage Certs with Windows Certificate Manager and PowerShell».
Работа с сертификатами обычно является одной из тех дополнительных задач, которые вынужден брать на себя системный администратор Windows. Диспетчер Сертификатов Windows (Windows Certificate Manager) — это один из основных инструментов, который позволяет выполнять эту работу.
В этой статье мы рассмотрим работу с сертификатами применительно к операционной системе Windows. Если же вы хотите узнать больше о том, как работают сертификаты в целом, ознакомьтесь с сопутствующей статьей «Your Guide to X509 Certificates».
Понимание хранилищ сертификатов
В диспетчере сертификатов Windows все сертификаты находятся в логических хранилищах, называемых «хранилищами сертификатов». Хранилища сертификатов – это «корзины», в которых Windows хранит все сертификаты, которые в настоящее время установлены, и сертификат может находиться более чем в одном хранилище.
К сожалению, хранилища сертификатов — не самая интуитивно понятная концепция для работы. О том, как различать эти хранилища и как с ними работать, вы прочитаете ниже.
Каждое хранилище находится в Реестре Windows и в файловой системе. При работе с сертификатом в хранилище вы взаимодействуете с логическим хранилищем, не изменяя напрямую реестр или файловую систему. Этот более простой способ позволяет вам работать с одним объектом, в то время как Windows заботится о том, как представить этот объект на диске.
Иногда можно встретить хранилища сертификатов, называемые физическими или логическими хранилищами. Физические хранилища ссылаются на фактическую файловую систему или место в реестре, где хранятся разделы реестра и / или файл(ы). Логические хранилища — это динамические ссылки, которые ссылаются на одно или несколько физических хранилищ. С логическими хранилищами намного проще работать, чем с физическими хранилищами для наиболее распространенных случаев использования.
Windows хранит сертификаты в двух разных областях — в контексте пользователя и компьютера. Сертификат помещается в один из этих двух контекстов в зависимости от того, должен ли сертификат использоваться одним пользователем, несколькими пользователями или самим компьютером. В остальной части этой статьи сертификат в контексте пользователя и компьютера будет неофициально называться сертификатами пользователей и сертификатами компьютеров.
Сертификаты пользователей
Если вы хотите, чтобы сертификат использовался одним пользователем, то идеальным вариантом будет хранилище пользовательских сертификатов внутри Диспетчера сертификатов Windows. Это общий вариант использования процессов аутентификации на основе сертификатов, таких как проводной IEEE 802.1x.
Сертификаты пользователей находятся в профиле текущего пользователя и логически отображаются только в контексте этого пользователя. Сертификаты пользователей «сопоставлены» и уникальны для каждого пользователя даже в одних и тех же системах.
Компьютерные сертификаты
Если сертификат будет использоваться всеми пользователями компьютера или каким-либо системным процессом, его следует поместить в хранилище в контексте компьютера. Например, если сертификат будет использоваться на веб-сервере для шифрования связи для всех клиентов, размещение сертификата в контексте компьютера будет подходящим вариантом.
Вы увидите, что хранилище сертификатов компьютера логически сопоставлено для всех пользовательских контекстов. Это позволяет всем пользователям использовать сертификаты в хранилище сертификатов компьютера в зависимости от разрешений, настроенных для закрытого ключа.
Сертификаты компьютера находятся в кусте реестра локального компьютера и в подкаталогах ProgramData. Сертификаты пользователя находятся в кусте реестра текущего пользователя и в подкаталогах AppData. Ниже вы можете увидеть, где каждый тип хранилища находится в реестре и файловой системе.
Контекст | Путь реестра | Объяснение |
---|---|---|
User | HKEY_CURRENT_USER SOFTWAREMicrosoftSystemCertificates |
Физическое хранилище для пользовательских открытых ключей |
User | HKEY_CURRENT_USER SOFTWAREPoliciesMicrosoftSystemCertificates |
Физическое хранилище для пользовательских открытых ключей, установленных объектами групповой политики Active Directory (AD) (GPO) |
Computer | HKEY_LOCAL_MACHINE SOFTWAREMicrosoftSystemCertificates |
Физическое хранилище общедоступных ключей для всей машины |
Computer | HKEY_LOCAL_MACHINE SOFTWAREMicrosoftCryptographyServices |
Физическое хранилище ключей, связанных с определенной службой |
Computer | HKEY_LOCAL_MACHINE SOFTWAREPoliciesMicrosoftSystemCertificates |
Физическое хранилище открытых ключей для всей машины, установленных объектами групповой политики. |
Computer | HKEY_LOCAL_MACHINE SOFTWAREMicrosoftEnterpriseCertificates |
Физическое хранилище общедоступных ключей, установленных корпоративными контейнерами PKI в домене AD |
Контекст | Расположение файла | Объяснение |
---|---|---|
User | $env:APPDATAMicrosoftSystemCertificates | Физическое хранилище для пользовательских открытых ключей и указателей на закрытые ключи |
User | $env:APPDATAMicrosoftCrypto | Физическое хранилище для контейнеров закрытых ключей для конкретных пользователей |
Computer | $env:ProgramDataMicrosoftCrypto | Физическое хранилище для контейнеров закрытых ключей для всей машины |
Предварительные требования
В оставшейся части этой статьи вы найдете несколько примеров, демонстрирующих взаимодействие с хранилищами сертификатов Windows. Чтобы воспроизвести эти примеры, убедитесь, что выполняются следующие требования:
- Windows Vista, Windows Server 2008 или более новая операционная система. В показанных примерах используется Windows 10 Корпоративная версии 1903.
- Знакомство с PowerShell. Хотя это и не обязательно, этот язык будет использоваться для ссылки на сертификаты, где это необходимо. Все показанные примеры были созданы с помощью Windows PowerShell 5.1.
- Вам не потребуется устанавливать какие-либо специальные сертификаты, но использование самозаверяющего сертификата полезно.
Управление сертификатами в Windows
В Windows есть три основных способа управления сертификатами:
- Оснастка консоли управления Microsoft (MMC) сертификатов (certmgr.msc)
- PowerShell
- Инструмент командной строки certutil
В этой статье вы узнаете, как управлять сертификатами с помощью оснастки Certificates MMC и PowerShell. Если вы хотите узнать больше о том, как использовать certutil, ознакомьтесь с документацией Microsoft.
PowerShell против диспетчера сертификатов Windows
Поскольку в Windows можно управлять сертификатами несколькими способами, встаёт вопрос выбора, что лучше использовать — GUI (MMC) или командную строку с PowerShell.
Во-первых, рассмотрим жизненный цикл сертификата. Если вы собираетесь установить или удалить один сертификат только один раз, рассмотрите возможность использования MMC. Но если вы управляете несколькими сертификатами или выполняете одну и ту же задачу снова и снова, использование командной строки может оказаться правильным решением. Даже если вы не умеете писать сценарии PowerShell, вам стоит этому научиться, если у вас есть много разных сертификатов, которыми нужно управлять.
Давайте сначала посмотрим, как обнаружить сертификаты, установленные в Windows, с помощью диспетчера сертификатов и PowerShell.
Использование диспетчера сертификатов Windows (certmgr.msc)
Чтобы просмотреть сертификаты с помощью MMC, откройте Диспетчер сертификатов: откройте меню «Пуск» и введите certmgr.msc. Это вызовет Windows Certificates MMC. Это начальное представление предоставит обзор всех логических хранилищ, отображаемых в левом окне.
На снимке экрана ниже видно, что выбрано логическое хранилище доверенных корневых центров сертификации
Просмотр физических хранилищ
По умолчанию Диспетчер сертификатов Windows не отображает физические хранилища. Чтобы показать их, в верхнем меню оснастки выбирайте «View» > «Options«. Затем вы увидите варианты отображения физических хранилищ сертификатов. Включение этого параметра упрощает определение конкретных путей в Windows.
Теперь вы можете видеть, что дополнительные контейнеры показаны в примере логического хранилища доверенных корневых центров сертификации, показанном ранее. Сертификаты по-прежнему сгруппированы относительно их логических хранилищ, но теперь вы можете увидеть физическое хранилище «Реестр».
Проверка атрибутов в диспетчере сертификатов Windows
Есть много атрибутов сертификата, которые вы можете увидеть при просмотре их с помощью MMC. Например, вы, вероятно, захотите выбрать определенные сертификаты по их атрибутам. Самый простой способ сделать это — указать Serial Number сертификата или значение Thumbprint. Если сертификат был подписан центром сертификации (CA), при выдаче он будет иметь серийный номер. Thumbprint вычисляется каждый раз при просмотре сертификата.
Вы можете увидеть некоторые атрибуты сертификата, открыв его в MMC, как показано ниже.
Следует отметить одну важную особенность — встроенные закрытые ключи. Сертификаты в Windows также могут иметь соответствующий закрытый ключ. Эти закрытые ключи хранятся в соответствующих физических хранилищах в виде зашифрованных файлов.
Чтобы быстро отличать сертификаты с соответствующим закрытым ключом и без него, посмотрите на значок сертификата. В Диспетчере сертификатов Windows, если значок просто выглядит как лист бумаги с лентой, соответствующий закрытый ключ отсутствует. Если у сертификата есть закрытый ключ, вы увидите ключ на значке MMC, и ключ в нижней части вкладки «Общие» при открытии сертификата
Использование PowerShell по физическому хранилищу
Как и в случае с MMC, вы можете просматривать сертификаты и управлять ими с помощью PowerShell. Давайте сначала проверим сертификаты в их физических хранилищах (реестр и файловая система).
Используя PowerShell командлет Get-ChildItem, вы можете перечислить все ключи и значения внутри родительского пути в реестре. Приведенная ниже команда перечислит все сертификаты вошедшего в систему пользователя в логическом хранилище промежуточных центров сертификации.
Get-ChildItem -Path 'HKCU:SoftwareMicrosoftSystemCertificatesCACertificates'
Каждая запись в кусте реестра, который вы видите, будет соответствовать отпечатку сертификата доверенного центра сертификации и его сертификату в соответствующем свойстве. Вы можете увидеть пример вывода ниже.
Другое распространенное хранилище — это Personal store. Ваши сертификаты для этого хранилища находятся в файловой системе, а не в реестре. В следующих командах мы покажем эти различные физические пути и их цели.
Каждый файл в каталоге, возвращенный приведенной ниже командой, соответствует сертификату, установленному в личном хранилище текущего пользователя.
Get-ChildItem -Path $env:APPDATAMicrosoftSystemCertificatesMyCertificates
Каждый файл, возвращаемый в приведенной ниже команде, является ссылкой на объект для закрытого ключа, созданный поставщиком хранилища ключей (KSP). Имя файла соответствует идентификатору ключа субъекта сертификата. К каждому устанавливаемому вами закрытому ключу будет добавлен соответствующий файл.
Get-ChildItem -Path $env:APPDATAMicrosoftSystemCertificatesMyKeys
Каждый файл в каталоге, возвращаемый следующей командой, является уникальным контейнером для зашифрованного закрытого ключа, созданного KSP. Нет прямой связи между именем файла и сертификатом, но файл является целью указателя в предыдущей команде.
Get-ChildItem -Path $env:APPDATAMicrosoftCryptoKeys
Использование PowerShell по логическому хранилищу
Поскольку работа с сертификатами на их физических путях встречается редко, в остальных примерах вы будете работать с логическими хранилищами.
PowerShell может получить доступ к логическим хранилищам Windows с помощью PSDrive-объекта «Cert:«, который сопоставляет сертификаты с физическими хранилищами так же, как это делает MMC.
К сожалению, MMC и «Cert:» не маркируют логические хранилища одинаково. Ниже вы можете увидеть сравнительную таблицу общих хранилищ и их названий как в MMC, так и в «Cert:» PSDrive.
Cert: | Certificates MMC |
---|---|
My | Personal |
Remote Desktop | Remote Desktop |
Root | Trusted Root Certification Authorities |
CA | Intermediate Certification Authorities |
AuthRoot | Third-Party Root Certification Authorities |
TrustedPublisher | Trusted Publishers |
Trust | Enterprise Trust |
UserDS | Active Directory User Object |
Выбор сертификатов
Когда вы работаете с сертификатами, вам понадобится способ фильтрации и выбора сертификатов для выполнения определенных операций. В большинстве случаев вы будете фильтровать и выбирать сертификаты на основе значения определенного расширения.
Для следующих примеров вам нужно начать с перечисления всех установленных сертификатов в хранилище корневого ЦС.
Get-ChildItem -Path 'Cert:CurrentUserRoot'
Возвращенные объекты будут объектами сертификатов, которые вы можете использовать в следующих примерах.
Общие расширения уже доступны как свойства объектов сертификата. В приведенном ниже примере вы используете Get-Member для вывода списка всех свойств возвращаемых объектов.
Get-ChildItem -Path 'Cert:CurrentUserRoot' | Get-Member -MemberType Properties
Как видим, некоторые из этих расширений, например «Issuer», помогают найти сертификат, который вы ищете. Расширения предоставляют информацию о сертификате, например, кому он выдан, для чего его можно использовать и любые ограничения на него.
В более сложных случаях использования вам может понадобиться найти сертификаты других расширений, таких как используемый шаблон сертификата. Сложность в том, что значения этих расширений возвращаются как массив целых чисел. Эти целые числа соответствуют содержимому в кодировке ASN.1.
Покажем пример взаимодействия с свойствами типа ScriptProperty. В приведенной ниже команде вы извлекаете Key Usages.
((Get-ChildItem -Path 'Cert:CurrentUserRoot' | Select -First 1).Extensions | Where-Object {$_.Oid.FriendlyName -eq 'Key Usage'}).format($true)
Новая часть, которую мы вводим в приведенной выше команде, — это метод форматирования, который выполняет декодирование ASN.1. Вы передаете ему логическое значение (например, $true), чтобы определить, хотим ли мы, чтобы возвращаемый объект был однострочным или многострочным.
Попробуем использовать значение Thumbprint из сертификата в приведенной ниже команде. Значение Thumbprint устанавливается как переменная PowerShell и используется для выбора конкретного сертификата в приведенных ниже командах.
$thumb = "cdd4eeae6000ac7f40c3802c171e30148030c072"
Get-ChildItem -Path 'Cert:CurrentUserRoot' | Where-Object {$_.Thumbprint -eq $thumb}
Создание самозаверяющих (self-signed) сертификатов с помощью PowerShell
PowerShell может создавать самозаверяющие (self-signed) сертификаты с помощью командлета New-SelfSignedCertificate. Самозаверяющие сертификаты полезны для тестирования, поскольку они позволяют генерировать пару открытого и закрытого ключей без использования центра сертификации.
Теперь давайте создадим самозаверяющий сертификат в хранилищах текущего пользователя и локального компьютера, чтобы использовать его в примерах для следующих шагов.
В приведенном ниже примере PowerShell создает пару открытого и закрытого ключей, самозаверяющий сертификат и устанавливает их все в соответствующие хранилища сертификатов.
New-SelfSignedCertificate -Subject 'User-Test' -CertStoreLocation 'Cert:CurrentUserMy'
New-SelfSignedCertificate -Subject 'Computer-Test' -CertStoreLocation 'Cert:LocalMachineMy'
Использование самозаверяющих сертификатов для продуктивных сервисов не рекомендуется, поскольку не существует всех механизмов, основанных на доверии.
Импорт и экспорт сертификатов в MMC
Криптография с открытым ключом основана на широкой доступности открытого ключа. Учитывая это, вам нужны стандартные способы эффективного обмена сертификатами. Не менее важна безопасность ваших личных ключей. Хранение закрытых ключей на недоступных носителях или с материалами для аварийного восстановления — обычная практика для определенных закрытых ключей.
Оба они требуют способов хранения этих криптографических объектов в стандартных форматах. Экспорт предоставляет функции для сохранения этих объектов и обеспечения использования широко распространенных стандартных форматов файлов. Импорт позволяет вам переносить криптографические объекты в операционные системы Windows.
Экспорт сертификатов из MMC относительно прост. Чтобы экспортировать сертификат без закрытого ключа, щелкните сертификат в MMC, выберите меню «Все задачи», а затем «Экспорт».
Во время экспорта вам будет предложено указать формат файла, как показано ниже. Наиболее распространены варианты кодирования — DER или Base-64
Экспорт закрытых ключей
Чтобы экспортировать сертификат с соответствующим закрытым ключом, вы должны соответствовать двум критериям:
- Вошедшая в систему учетная запись должна иметь разрешение на закрытый ключ (только для сертификатов компьютеров);
- Закрытый ключ должен быть помечен как экспортируемый.
Чтобы проверить разрешения для закрытых ключей локального компьютера, вы можете выбрать сертификат с закрытым ключом, выбрать «Все задачи» и «Управление закрытыми ключами» в MMC «Сертификаты». В открывшемся диалоговом окне отображаются записи управления доступом для закрытых ключей.
Когда выше обозначенные условия выполнены, вы можете выбрать сертификат, щелкнуть «Все задачи», а затем «Экспорт», как если бы вы использовали сертификат только с открытым ключом. При экспорте теперь у вас должна присутствовать возможность выбора экспорта закрытого ключа («Yes, export the private key»), как показано ниже.
Когда вы экспортируете закрытый ключ в Windows, вы можете сохранить файл только как PFX. Этот и другие типы файлов и форматы кодирования подробно описаны в этом посте.
Для остальных параметров, отображаемых в мастере экспорта, вы можете использовать значения по умолчанию. В таблице ниже приводится краткое изложение каждого из них.
Настройка | Описание |
---|---|
Including all certificates in the certification path if possible | Помогает с переносимостью эмитентов сертификатов и включает все соответствующие открытые ключи в PFX. |
Delete the private key if the export is successful | Удаляет закрытый ключ из файла и имеет несколько распространенных вариантов использования, но одним из примеров является проверка доступа к закрытым ключам. |
Export all extended properties | Будет включать любые расширения в текущем сертификате, они относятся к сертификатам [конкретные настройки] для интерфейсов Windows. |
Enable certificate privacy | Обычно в экспортируемом PFX-файле шифруется только закрытый ключ, этот параметр шифрует все содержимое PFX-файла. |
Group or user names | Вы можете использовать участника безопасности группы или пользователя из Active Directory для шифрования содержимого файла PFX, но пароль является наиболее переносимым вариантом для устаревших систем или компьютеров, не присоединенных к тому же домену. |
Импорт сертификатов
Функция импорта одинакова для всех поддерживаемых типов файлов сертификатов. Единственная разница в том, что если файл содержит закрытый ключ, вы можете «Отметить этот ключ как экспортируемый», о чем вы узнаете подробнее ниже. Windows будет использовать мастер импорта сертификатов.
При использовании мастера импорта сертификатов для PFX вам потребуется указать пароль, используемый для шифрования закрытого ключа. Вот еще один обзор вариантов импорта.
Настройка | Описание |
---|---|
Enable strong private key protection | Требуется пароль для каждого доступа к закрытому ключу. Будьте осторожны с новыми функциями, поскольку они не будут поддерживаться во всех программах. |
Mark this key as exportable | Вы должны стараться избегать использования этого параметра в любой конечной системе, закрытые ключи следует рассматривать так же, как и хранение паролей. |
Protect private key using [virtualization-based security] | Этот параметр обеспечивает дополнительные функции безопасности для защиты закрытых ключей от сложных атак вредоносного ПО. |
Include all extended properties | Относится к тем же настройкам Windows, что и при экспорте. |
Сертификаты для подписи кода PowerShell — хороший вариант использования надежной защиты закрытого ключа.
С автоматическим размещением сертификатов следует проявлять осторожность. Скорее всего, вы получите наилучшие результаты, выбрав хранилище сертификатов вручную.
Импорт и экспорт сертификатов в PowerShell
Теперь с помощью PowerShell экспортируйте один из самозаверяющих сертификатов, которые вы создали ранее. В этом примере вы выбираете сертификат в личном логическом хранилище CurrentUser, который был самозаверяющим.
$certificate = Get-Item (Get-ChildItem -Path 'Cert:CurrentUserMy' | Where-Object {$_.Subject -eq $_.Issuer}).PSPath
Теперь, когда вы выбрали сертификат, вы можете использовать команду Export-Certificate, чтобы сохранить файл в кодировке DER, используя команду ниже.
Export-Certificate -FilePath $env:USERPROFILEDesktopcertificate.cer -Cert $certificate
Теперь давайте посмотрим на экспорт закрытого ключа. Ниже вы проверяете, что у выбранного сертификата есть закрытый ключ. Если он не возвращает True, то команда Get-Item, скорее всего, выбрала неправильный сертификат.
$certificate.HasPrivateKey
Ниже вы установите пароль, который будет использоваться для шифрования закрытого ключа. Затем экспортируйте выбранный сертификат в файл PFX и используйте пароль, который вы ввели ранее, чтобы зашифровать файл.
$pfxPassword = "ComplexPassword!" | ConvertTo-SecureString -AsPlainText -Force
Export-PfxCertificate -FilePath $env:USERPROFILEDesktopcertificate.pfx -Password $pfxPassword -Cert $certificate
В случае, если необходимо выполнить импорт, как и при экспорте, есть две команды. Одна команда для импорта сертификатов и одна для импорта файлов PFX.
Ниже команда Import-Certificate импортирует файл в формате DER, который вы экспортировали ранее, в личное хранилище текущего пользователя.
Import-Certificate -FilePath $env:USERPROFILEDesktopcertificate.cer -CertStoreLocation 'Cert:CurrentUserMy'
Допустим, вы тоже хотите установить закрытый ключ этого сертификата.
$pfxPassword = "ComplexPassword!" | ConvertTo-SecureString -AsPlainText -Force
Import-PfxCertificate -Exportable -Password $pfxPassword -CertStoreLocation 'Cert:CurrentUserMy' -FilePath $env:USERPROFILEDesktopcertificate.pfx
Имейте в виду, что пароль должен быть защищенной строкой. Кроме того, если вы импортируете в хранилище локального компьютера (например, «Cert:LocalMachine«), вам нужно будет запустить команду из командной строки администратора с повышенными привилегиями.
В приведенном выше примере вы также используете параметр -Exportable с командой, отмечая закрытый ключ как экспортируемый в будущем. По умолчанию (без указания этого параметра) экспорт не используется. Экспортируемые закрытые ключи – отельный аспект информационной безопасности, заслуживающий отдельного внимания.
Удаление сертификатов с помощью PowerShell
При удалении сертификатов помните, что понятие «Корзина Windows» в этом случае отсутствует. Как только вы удалите сертификат, он исчезнет! Это означает, что очень важно подтвердить, что вы удаляете правильный сертификат, путем проверки уникального идентификатора, такого как серийный номер или значение расширения Thumbprint.
Как и выше, в приведенной ниже команде мы выбираем самозаверяющий сертификат из личного хранилища текущего пользователя.
$certificate = Get-Item (Get-ChildItem -Path 'Cert:CurrentUserMy' | Where-Object {$_.Subject -eq $_.Issuer}).PSPath
Ниже вы можете увидеть свойства отпечатка, серийного номера и темы для выбранного сертификата, чтобы убедиться, что это именно тот сертификат, который вы собираетесь выбрать.
$certificate.Thumbprint
$certificate.SerialNumber
$certificate.Subject
Убедитесь, что вы выбрали правильный сертификат, который собираетесь удалить.
Приведенная ниже команда удаляет все выбранные объекты сертификата, используйте с осторожностью! Передав объект $certificate через конвейер в командлет Remove-Item в приведенной ниже команде, вы удалите все содержимое сертификата без каких-либо запросов на проверку.
$certificate | Remove-Item
Резюме
На протяжении всей этой статьи вы работали с сертификатами в Windows, изучая, как получить к ним доступ, и некоторые инструменты, которые можно использовать при работе с ними. По этой теме можно изучить гораздо больше, в том числе о том, как связать установленные сертификаты с конкретными службами или даже о том, как реализовать инфраструктуру закрытого открытого ключа (PKI) путем развертывания собственных центров сертификации (CA).
Содержание
- Введение
- Что такое сертификат PFX
- Логические хранилища
- Модуль PKI
- Поиск и выбор сертификата
- Создание сертификата
- Установка сертификата pfx
- Добавление сертификата в список доверенных
- Проверка наличия дубликата сертификата
- Экспорт и импорт сертификата
- Экспорт сертификата pfx
- Импорт сертификата pfx
- Как экспортировать сертификат cer из pfx
- Удаление сертификата
- Удаление с помощью thumbprint
- Поиск и удаление сертификата с помощью сопоставления значений
- Диспетчер сертификатов Windows
Введение
Сертификат – это контейнер для открытого ключа. Он включает в себя такую информацию как значение открытого ключа, имя сервера или пользователя, некоторую дополнительную информацию о сервере или пользователе, а также содержит электронную подпись, сформированную издающим центром сертификации (ЦС). Ранее мы уже писали о работе с сертификатами pfx с помощью openssl, теперь рассмотрим использование встроенных средств, а именно powershell.
Что такое сертификат PFX
Файл .pfx, который не следует путать с .cer, представляет собой архив PKCS#12; это пакет, который может содержать несколько объектов с дополнительной защитой паролем. Обычно он содержит сертификат (возможно, со своим набором цепочки сертификатов верхнеуровневых УЦ) и соответствующий закрытый ключ. В то время как PFX может содержать в себе несколько сертификатов, файл .cer содержит один единственный сертификат без пароля и закрытого ключа. В Windows все сертификаты находятся в логических местах хранения, называемых хранилищами сертификатов.
Одним из самых распространенных областей применения сертификатов PFX является подпись кода (code signing). Также, в случае защиты надежным паролем pfx можно передавать по открытым каналам связи.
Логические хранилища
Логические хранилища – это виртуальные месторасположения, в которых которых локально храняться сертификаты как для пользователя так и для компьютера. Powershell использует Cert PSDrive для сопоставления сертификатов с физическими хранилищами. Наименование логических хранилищ Certificates Microsoft Management Console (MMC) отличается от маркировки хранилища Cert PSDrive. В таблице ниже показано сравнение между ними:
CERT: | CERTIFICATES MMC |
---|---|
My | Личные |
Remote Desktop | Удаленный рабочий стол |
Root | Доверенные корневые центры сертификации |
CA | Промежуточные центры сертификации |
AuthRoot | Сторонние корневые центры сертификации |
TrustedPublisher | Доверенные издатели |
Trust | Доверительные отношения в предприятии |
UserDS | Объект пользователя Active Directory |
Модуль PKI
Утилита MakeCert.exe, входящая в состав Microsoft .NET Framework SDK и Microsoft Windows SDK, используется для создания самоподписанного сертификата. В системе, где не установлен Windows SDK, для управления сертификатами используются команды модуля Powershell PKI.
Чтобы перечислить все команды, доступные в модуле PKI, выполните следующую команду:
Get-Command -Module PKI
Командлеты, используемые в этой статье, описаны ниже:
Export-PfxCertificate
Командлет Export-PfxCertificate экспортирует сертификат или объект PFXData в файл Personal Information Exchange (PFX). По умолчанию экспортируются расширенные свойства и вся цепочка.
Get-Certificate
КомандлетGet-Certificate можно использовать для отправки запроса на сертификат и установки полученного сертификата, установки сертификата из запроса на сертификат, а также для регистрации в службе каталогов протокола LDAP.
Get-PfxData
Командлет Get-PfxData извлекает содержимое файла Personal Information Exchange (PFX) в структуру, содержащую сертификат конечного субъекта, любые промежуточные и корневые сертификаты.
Import-PfxCertificate
КомандлетImport-PfxCertificate импортирует сертификаты и закрытые ключи из файла PFX в локальное хранилище.
New-SelfSignedCertificate
Командлет New-SelfSignedCertificate создает самоподписанный сертификат. С помощью параметра CloneCert указанный сертификат может быть создан на основе существующего сертификата с копированием всех параметров из оригинального сертификата, за исключением открытого ключа.
Поиск и выбор сертификата
В Powershell Cert: PSDrive используется для вывода списка сертификатов в определенном хранилище. Чтобы вывести оба хранилища в Cert: PSDrive, выполните следующую команду:
Get-ChildItem -Path Cert:
Будут показаны месторасположения сертификатов для CurrentUser и LocalMachine. Чтобы перечислить сертификаты для доверенных корневых центров сертификации LocalMachine, выполните следующую команду:
Get-ChildItem -Path Cert:LocalMachineRoot
Возвращаемый объект будет представлять собой сертификаты, которые можно изменить, удалить или экспортировать.
Команду Get-ChildItem можно комбинировать с Where-Object для поиска конкретных сертификатов. Приведенная ниже команда найдет сертификат, предположительно выданный Microsoft, проверяя свойство Subject сертификатов:
Get-ChildItem -Path Cert:LocalMachineRoot | Where-Object {$_.Subject.Contains("Microsoft")}
У выведенных в сертификатов часть значения Subject будет содержать Microsoft.
Создание сертификата
Для создания сертификата необходимо указать значения -DnsName (имя DNS-сервера) или -Subject и -CertStoreLocation (хранилище сертификатов, в которое будет помещен созданный сертификат). Чтобы создать сертификат для DNS itsecforu-test.com и установить его в список Личные сертификаты в системе, выполните следующую команду:
New-SelfSignedCertificate -DnsNameitsecforu-test.com -CertStoreLocation cert:CurrentUserMy
Команда генерирует новый сертификат и устанавливает его в личное хранилище пользователя. При открытии certmgr.msc ( certlm.msc – для локального компьютера соответственно ) сертификат появится в разделе Personal. В выводе будут показаны сведения о только что созданном сертификате, включая его отпечаток:
По умолчанию самоподписанный сертификат генерируется со следующими настройками:
- Криптографический алгоритм: RSA;
- Длина ключа: 2048 бит;
- Допустимое использование ключа: Проверка подлинност клиента и Проверка подлинности сервера;
- Сертификат может быть использован для цифровой подписи, шифрования ключей;
- Срок действия: 1 год.
Срок действия сгенерированного сертификата ограничен одним годом. Для увеличения срока действия сертификата необходимо указать соответствующий атрибут Date с увеличенным значением срока действия с помощью ключа -notafter. Чтобы выпустить сертификат на 5 лет, выполните приведенную ниже команду:
$expiry_year = (Get-Date).AddYears(5)
New-SelfSignedCertificate -DnsName itsecforu-test.com -notafter $expiry_year -CertStoreLocation Cert:CurrentUserMy
Новые сертификаты могут быть созданы только в личных хранилищах Cert:LocalMachineMy или Cert:CurrentUserMy. Выполните приведенную ниже команду help для просмотра всех остальных параметров, принимаемых командой New-SelfSignedCertificate:
help New-SelfSignedCertificate -Full
Установка сертификата pfx
Сертификат может быть установлен в различные места хранения, каждое место хранения имеет свое определенное назначение, но в этой статье мы будем устанавливать в четыре места Cert:CurrentUserMy, Cert:LocalMachineMy, Cert:CurrentUserRoot и Cert:LocalMachineRoot. Расположение My является личным хранилищем для ненадежных приложений, а Root – хранилищем для доверенных сертификатов.
Команда, используемая для установки общего сертификата, отличается от команды для установки сертификата PFX. Для установки сертификата pfx используется команда Powershell Import-PfxCertificate.
Чтобы установить сертификат PFX в личное хранилище текущего пользователя, используйте следующую команду:
Import-PfxCertificate -FilePath ./itsecforu.pfx -CertStoreLocation Cert:CurrentUserMy -Password P@sw0rd
Для установки в личное местоположение системы измените местоположение хранилища в команде выше с Cert:CurrentUserMy на Cert:LocalMachineMy.
Чтобы установить PFX сертификат в доверенное хранилище текущего пользователя, используйте следующую команду:
Import-PfxCertificate -FilePath ./itsecforu.pfx -CertStoreLocation Cert:CurrentUserRoot -Password P@sw0rd
При установке в корневое расположение текущего пользователя появится диалоговое окно для подтверждения установки сертификата, но при установке в системное корневое расположение никакого диалога не появится. Для установки в системное доверенное место измените расположение хранилища в команде выше с Cert:CurrentUserRoot на Cert:LocalMachineRoot.
Добавление сертификата в список доверенных
Недоверенный сертификат гораздо опаснее и подозрительнее, чем отсутствие сертификата вообще, поэтому важно добавить наш сертификат в доверенные корневые сертификаты.
Сертификаты могут быть созданы только в хранилище Cert:LocalMachineMy или Cert:CurrentUserMy . Поскольку любой сертификат в этом месте по умолчанию помечен как недоверенный, чтобы сделать его легитимным, необходимо его переместить из Cert:LocalMachineMy или Cert:CurrentUserMy в Cert:LocalMachineRoot и Cert:CurrentUserRoot соответственно.
Move-Item -Path$cert-Destination "Cert:LocalMachineRoot"
Проверка наличия дубликата сертификата
Чтобы избежать повторного добавления уже существующего сертификата в хранилище сертификатов, перед добавлением нового сертификата с тем же значением Subject следует проверить и удалить уже имеющийся сертификат. Powershell автоматически создает путь виртуального диска для метки cert: и ведет себя как обычный каталог. В приведенном ниже фрагменте проверяется путь cert:LocalMachineMy хранилища сертификатов, чтобы найти сертификат по значению Subject.
$cert_name = "itsecforu-test.com" ForEach ($cert in (ls cert:CurrentUserMy)) { If ($cert.Subject -eq "CN=$cert_name") { //the certificate can be deleted or edited in here } }
Экспорт и импорт сертификата
Команды для импорта и экспорта pfx-сертификата отличаются от команд для экспорта и импорта обычного сертификата. Команда Import-PfxCertificate используется для импорта запароленного сертификата pfx, а команда Export-PfxCertificate – для экспорта сертификата из места хранения в новое местоположение файла.
Экспорт сертификата pfx
Для экспорта сертификата pfx необходим пароль для шифрования закрытого ключа. В приведенном ниже примере мы используем значение Subject для поиска экспортируемого сертификата, выбрав сертификат, значение Subject которого равно itsecforu-test.com
$certificate = Get-ChildItem -Path Cert:CurrentUserMy | Where-Object {$_.Subject -match "itsecforu-test.com"} После выбора сертификата его можно экспортировать из места хранения в папку с помощью приведенной ниже команды: $pass= "Qwerty123" | ConvertTo-SecureString -AsPlainText -Force Export-PfxCertificate -Cert $certificate -FilePath $env:USERPROFILEDocumentsitsecforu-test.com.pfx -Password $pass
Импорт сертификата pfx
Скаченные или экспортированные сертификаты pfx можно установить с помощью команды Import-PfxCertificate. Для импорта требуется пароль для сертификата и местоположение.
Команда ниже импортирует сертификат pfx, который мы экспортировали ранее:
$password= "Qwerty123" | ConvertTo-SecureString -AsPlainText -Force Import-PfxCertificate -Exportable -Password $password -CertStoreLocation Cert:CurrentUserMy -FilePath $env:USERPROFILEDocumentsitsecforu-test.com.pfx
Параметр -Exportable отмечает закрытый ключ как экспортируемый.
Как экспортировать сертификат cer из pfx
Для экспорта сертификата из файла pfx используется комбинированная команда Get-PfxCertificate и Export-Certificate. Get-PfxCertificate используется для поиска сертификата pfx, а Export-Certificate – для экспорта указанного сертификата в FilePath. Требуется ввод пароля от pfx контейнера Ниже приведенная команда экспортирует сертификат в кодировке DER (двоичный) из файла pfx.
Get-PfxCertificate -FilePath "C:certsTest.pfx" | Export-Certificate -FilePath "C:certsTest.cer" -Type CERT
Обратите внимание на параметр-Type, который используется для указания типа экспортируемого сертификата, в данном примере это сертификат CERT в кодировке DER (двоичный). Существуют и другие типы, они перечислены ниже.
-Type <CertType> Указывает тип выходного файла для экспорта сертификатов следующим образом. -- SST: формат файла Microsoft serialized certificate store (.sst), который может содержать один или несколько сертификатов. Это значение по умолчанию для нескольких сертификатов. -- CERT: формат файла .cer, который содержит один сертификат в DER-кодировке. Это значение по умолчанию для одного сертификата. -- P7B: формат файла PKCS#7, который может содержать один или несколько сертификатов.
Удаление сертификата
Для удаления сертификата можно использовать команду Remove-Item в Powershell. Перед удалением сертификата необходимо узнать его значение thumbprint (отпечатка) или определить сам объект сертификата.
Удаление с помощью thumbprint
В приведенном ниже фрагменте для удаления используется отпечаток сертификата…
Get-ChildItem Cert:CurrentUserMy7da4d700318ee2a08f96aab9bc71990ca6376053| Remove-Item
Поиск и удаление сертификата с помощью сопоставления значений
Сертификат можно искать в хранилище с помощью команды Where-Object, которая принимает условный оператор, соответствующий искомому сертификату.
Get-ChildItem Cert:CurrentUserMy | Where-Object { $_.Subject -match 'itsecforu-test.com' } | Remove-Item
Обратите внимание, что мы используем значения поля сертификата Subject , другие возможные параметры – Thumbprint и SerialNumber.
Диспетчер сертификатов Windows
Диспетчер сертификатов Windows (certmgr.msc) – это приложение с графическим интерфейсом Windows для управления сертификатами. Найдите certmgr в меню Пуск, чтобы открыть Windows Certificates MMC или введите certmgr.msc в командной строке. Вид консоли предоставляет собой обзор всех локальных хранилищ.
Сертификаты можно устанавливать, удалять, импортировать и экспортировать из диспетчера сертификатов Windows.
Опасные корневые сертификаты являются серьезной проблемой. ПО Superfish компании Lenovo, eDellRoot от Dell и любая другая установленная вами программа может добавить в систему корневой сертификат, который сделает ваш компьютер открытым для интернет атак. Давайте посмотрим, как проверить, имеются ли в вашей системе опасные сертификаты.
Раньше это было не просто. Тем не менее, появился новый инструмент от Microsoft, который может быстро сканировать систему и сообщить, установлены ли какие-либо сертификаты, которым не стоит доверять. Это утилита будет особенно полезна для проверки только что установленной системы, особенно если она установлена OEM или из разнообразных «сборок», широко распространенных на торрент-трекерах.
Как проверить Windows на наличие опасных корневых сертификатов?
Мы будем использовать инструмент SigCheck, входящий в набор системных утилит SysInternals с 2016 года.
Чтобы начать работу, скачайте утилиту SigCheck. Откройте загруженный файл .zip и извлеките из него sigcheck.exe. Можно просто на рабочий стол.
Перейдите в папку, содержащую файл sigcheck.exe с помощью проводника Windows. Нажмите и удерживайте клавишу Shift и не отпуская ее кликните правой кнопкой мыши в окне проводника и выберите «Открыть командную строку здесь»
Введите следующую команду в командной строке и нажмите Enter:
SigCheck -tv
SigCheck загрузит список доверенных сертификатов Microsoft и сравнит его с сертификатами, найденными на вашем компьютере. Если какие-то сертификаты не входят в список доверенных, вы увидите их здесь. Если все в порядке, вы увидите надпись «No certificates found»
Если в системе непонятный сертификат?
Если приложение SigCheck отобразила по результатам работы один или несколько недопустимых сертификатов в системе, то рекомендуем поискать в интернете по имени сертификата, что он такое и какая программа его могла его установить в систему.
Удаление сертификата вручную не самая лучшая идея, т.к. если он был установлен какой либо имеющейся на компьютере программой, то программа может запросто переустановить его после ручного удаления. Для уверенности в удалении зловредного сертификата вам необходимо удостовериться в том, какая программа его установила и удалить эту программу через инструмент «Установка и удаление программ». Возможно, даже этого будет недостаточно, т.к. Adware могут оставаться в системе после удаления штатными средствами. Тут без специального инструмента чистки не обойтись. Выполните поиск в интернете по имени сертификата и воспользуйтесь соответствующим средством очистки системы.
Тем не менее, давайте посмотрим, как вручную удалить сертификат из системы.
Для этого нажмите Win+R (команда «Выполнить» в Windows) и введите туда certmgr.msc, нажмите Enter
Корневые сертификаты лежат в «Доверенные корневые центры сертификации» — «Сертификаты». Тут найдите подозрительный сертификат, на который вам указала программа SigCheck и удалите его.
Будьте внимательны, не удалите никакие доверенные сертификаты. Это очень плачевно скажется на работе вашей системы.
Microsoft уже объявила, о том, что начинает борьбу с ПО, устанавливающим подобные сертификаты, но на данный момент поиск подставного сертификата возможен только с помощью SigCheck.
Время прочтения
45 мин
Просмотры 4.9K
Привет, Хабр! Меня зовут Андрей Благов, я архитектор центра профессиональных сервисов и R&D в облачном провайдере T1 Cloud, и сегодня речь пойдет о сертификатах SSL. Добавляйте статью в закладки, она вам точно пригодится. В ней я поделюсь PowerShell-скриптами для проверки действительности SSL-сертификатов.
А если ваш отдел мониторинга не находит на вас время, но перед вами стоит задача автоматизировать рутинные процессы — подписывайтесь на наш блог. В дальнейшем я планирую делиться личным опытом и рассказывать о том, как с помощью PowerShell можно наладить выгрузки отчетов, создавать проверки и оповещения по различным условиям.
SSL-сертификаты нужно проверять регулярно и тщательно. В 2020 году удостоверяющие центры отказались от выпуска двухлетних сертификатов. К сожалению, тогда многие администраторы узнавали об этом не очень своевременно — например, когда при повторном выпуске срок действия вдруг сокращался до года.
Сейчас ситуация еще сложнее. В марте этого года крупные поставщики SSL-сертификатов стали отказывать в выпуске сертификатов для организаций в РФ и РБ. По крайней мере, на данный момент речь идет о GeoTrust, Sectigo, DigiCert, Thawte, Rapid, но к этому списку могут добавиться и другие. Продажа новых и продление уже имеющихся сертификатов для доменов Рунета ограничена.
Проверить, «жив» ли сертификат, владельцу одного-двух ресурсов труда не составит. Но что делать, если вы управляете сразу множеством сервисов? Ниже я приведу четыре PowerShell-скрипта, которые помогут быстро проверить, актуален ли SSL-сертификат (включая проверку по кастомным портам), через сколько дней он истечет, получить информацию об издателе сертификата по цепочке сертификации (Certificate Chain) и возможных проблемах при выпуске/продлении сертификата.
Поскольку теперь все SSL-сертификаты действуют только год, эти скрипты подойдут не только для разовой проверки, но и в качестве инструмента регулярного мониторинга. Стандартные инструменты наподобие Zabbix далеко не всегда умеют делать это «из коробки» и требуют установки отдельных менеджмент-паков / шаблонов и прочих танцев с бубном, на которые не всегда находится время.
Зачем проверять сертификаты
Сначала я хотел бы пояснить, что сейчас вообще происходит с SSL-сертификатами и зачем вам могут понадобиться скрипты ниже. Вот вам несколько фактов о том, как обстоит ситуация сегодня.
-
1 сентября 2020-го глобальные сертификационные центры прекратили выдачу двухлетних SSL-сертификатов.
С этого момента максимальный срок действия SSL-сертификатов сократился до 398 дней. Подробно углубляться в тему не буду — все уже объяснили здесь. Отмечу, что при повторном выпуске (например, для добавления или замены домена, изменения информации об организации) уже открытого двухлетнего сертификата срок действия нового сокращался до 397 дней, и многие пользователи узнавали об этом не совсем своевременно.
-
Wildcard-сертификаты подходят не во всех ситуациях.
Сервисы, как правило, запускаются не одновременно (например, в январе вы запустили один, а в феврале — второй), а некоторым из них для полноценной работы требуется, чтобы в расширении, где прописаны DNS-имена, было явно указано имя конкретного узла. Поэтому в ряде случаев требуются сертификаты, у которых в расширении «DNS-имя» перечислены имена узлов.
Обратите внимание на сертификат habr.com — это wildcard, но при этом в DNS явно указано имя:
Этот сертификат подойдет для классических веб-узлов с именами *.habr.com и habr.com, но для сервисов с проверкой имени по расширению DNS — только для узла habr.com.
-
Последствия санкций.
В связи с текущей геополитической ситуацией зарубежные издающие и корневые сертификационные центры отказываются продлевать сертификаты пользователям из РФ и Белоруссии. Если мы продолжим жить в текущих реалиях, продлить [пока еще актуальные] SSL-сертификаты станет попросту невозможно — удостоверяющий центр откажется это делать.
Что имеем в итоге. У администратора куча сертификатов, которыми нужно управлять:
-
Отслеживать срок действия сертификата (проверять, сколько дней осталось до его окончания).
-
Какие имена «закрывает» тот или иной сертификат.
-
Мониторить, могут ли с сертификатом возникнуть какие-либо проблемы.
При продлении сертификата в том же центре сертификации можно пройти упрощенную процедуру валидации. Если необходимо выпустить сертификат в другом центре сертификации или изменить параметры выпускаемого сертификата, то процедуру валидации нужно будет пройти в полном объеме, а это тоже отнимает время.
Небольшой дисклеймер. Сегодня я покажу, как можно решить эту проблему с помощью четырех PowerShell-скриптов. Конечно, существуют и другие способы проверки SSL-сертификатов, в этой статье я лишь хочу поделиться инструментами, которые удобны именно мне, и показать, как их использовать.
Эти скрипты я написал на базе функции, которую можно свободно найти на просторах интернета. Если упрощенно, работает она следующим образом:
-
Создаём TCP-соединение с удаленным узлом по заданному порту.
-
Используя эти параметры, создаем SSL-соединение между нами и удаленным узлом.
-
Устанавливаем соединение.
-
После установления соединения получаем данные об удаленном сертификате.
-
Разбираем данные.
Важно: перед использованием скриптов не забудьте заменить lorem ipsum на реальные данные — подставить нужные доменные имена и порты.
При желании с помощью этих скриптов можно автоматизировать проверку SSL-сертификатов — например, оставив только нужные вам параметры и настроив отправку email’ов с результатами их работы. Под каждым из них я размещу ссылку на скачивание — welcome.
Скрипт #1. Проверяем, кто выдал SSL-сертификат и какие имена закрываются
Какие данные получаем с помощью этого скрипта:
-
Subject — субъект, которому выдан сертификат;
-
Issuer — издатель сертификата;
-
NotBefore — дата выпуска;
-
NotAfter — дата окончания действия;
-
DaysLeft — количество оставшихся дней;
-
DNSNames — DNS-имена, которые закрывает сертификат
В скрипт добавлена возможность проверки оставшегося количества дней валидности сертификата. Также добавлен параметр triggerdays, который задается в количествах дней. После фильтрации вывода по этому параметру получим сертификаты, требующие внимания.
Скрипт №1
#Та самая функция, которую я нашел на просторах интернета
#и немного модифицировал
function get-remotesslcertificate {
[CmdletBinding()]
param (
[Parameter(Mandatory=$true)]
[string]
$ComputerName,
#Порт по умолчанию
[int]
$Port = 443
)
$Certificate = $null
$TcpClient = New-Object -TypeName System.Net.Sockets.TcpClient
try {
$TcpClient.Connect($ComputerName, $Port)
$TcpStream = $TcpClient.GetStream()
$Callback = { param($sender, $cert, $chain, $errors) return $true }
[System.Security.Authentication.SslProtocols]$protocol = "tls12"
$SslStream = New-Object -TypeName System.Net.Security.SslStream -ArgumentList @($TcpStream, $true, $Callback)
try {
$SslStream.AuthenticateAsClient($computername,$null,$protocol,$false)
$Certificate = $SslStream.RemoteCertificate
} finally {
$SslStream.Dispose()
}
} finally {
$TcpClient.Dispose()
}
if ($Certificate) {
if ($Certificate -isnot [System.Security.Cryptography.X509Certificates.X509Certificate2]) {
$Certificate = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Certificate2 -ArgumentList $Certificate
}
Write-Output $Certificate
}
}
#Функция на выходе предоставляет нам объект класса #System.Security.Cryptography.X509Certificates.X509Certificate2
#Наша задача — разобрать его на нужные нам данные
#Для примера берем список узлов
#Сделано для удобства вставки текста напрямую из Excel или блокнота
#get list of web sites.
[array]$list = @'
tproger.ru
veeam.com
rambler.ru
qna.habr.com
spb.hh.ru
'@ -split("`r`n")
#Указываем произвольное количество дней, чтобы отслеживать валидность
#trigger days to expire
$triggerdays = 140
#Для удобства формирования вывода задаем подходящий разделитель #списка
#Если вывод вы планируете парсить, в качестве разделителя лучше использовать ;
#set delimiter
$delimiter = "`n"
$report = @()
foreach ($line in $list){
$certificate = get-remotesslcertificate $line
$daysleft = New-TimeSpan -Start (Get-Date) -End $certificate.NotAfter
$report += $certificate | Select-Object Subject,
Issuer,
NotBefore,
NotAfter,
@{label = "DaysLeft";expression={$daysleft.Days}},
@{label = "DNSNames";expression={$_.DnsNameList -join($delimiter)}}
}
#Получаем полный отчет
#full report
Write-Host "Full report" -ForegroundColor Green
Write-Output $report
#Отчет по сертификатам с валидностью меньше $triggerdays дней
#reports with expired certificates
Write-Host "Warning" -ForegroundColor Yellow
$report | Where-Object {$_.DaysLeft -lt $triggerdays}
Если в списке оставить только qna.habr.com, то вывод будет следующим:
Скачать скрипт
Скрипт №2. Проверяем SSL-сертификаты для кастомных портов
Пригодится, если нужно проверить сертификат для сервисов, работающих по кастомным портам (не 443), например, почтовых серверов, работающих по протоколам POP и IMAP, Veeam Cloud Connect и так далее.
Скрипт №2
function get-remotesslcertificate {
[CmdletBinding()]
param (
[Parameter(Mandatory=$true)]
[string]
$ComputerName,
#Порт по умолчанию
[int]
$Port = 443
)
$Certificate = $null
$TcpClient = New-Object -TypeName System.Net.Sockets.TcpClient
try {
$TcpClient.Connect($ComputerName, $Port)
$TcpStream = $TcpClient.GetStream()
$Callback = { param($sender, $cert, $chain, $errors) return $true }
[System.Security.Authentication.SslProtocols]$protocol = "tls12"
$SslStream = New-Object -TypeName System.Net.Security.SslStream -ArgumentList @($TcpStream, $true, $Callback)
try {
$SslStream.AuthenticateAsClient($computername,$null,$protocol,$false)
$Certificate = $SslStream.RemoteCertificate
} finally {
$SslStream.Dispose()
}
} finally {
$TcpClient.Dispose()
}
if ($Certificate) {
if ($Certificate -isnot [System.Security.Cryptography.X509Certificates.X509Certificate2]) {
$Certificate = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Certificate2 -ArgumentList $Certificate
}
Write-Output $Certificate
}
}
#формируем коллекцию объектов
#Создаем пустой объект с определенными свойствами
#Далее их заполняем
#Обратите внимание: здесь указываются эндпоинты и кастомные порты #к ним
#get list of endpoints and ports
$list = @()
$site1 = ''| Select-Object endpoint, port
$site1.endpoint = "pop.rambler.ru"
$site1.port = "995"
$list += $site1
$site2 = ''| Select-Object endpoint, port
$site2.endpoint = "imap.rambler.ru"
$site2.port = "993"
$list += $site2
$site3 = ''| Select-Object endpoint, port
$site3.endpoint = "habr.com"
$site3.port = "443"
$list += $site3
#Указываем произвольное количество дней, чтобы отслеживать валидность
#trigger days to expire
$triggerdays = 160
#Для удобства формирования вывода задаем подходящий разделитель #списка
#set delimiter
$delimiter = "`n"
$report = @()
foreach ($line in $list){
$certificate = get-remotesslcertificate $line.endpoint $line.port
$daysleft = New-TimeSpan -Start (Get-Date) -End $certificate.NotAfter
$report += $certificate | Select-Object @{label = "Endpoint"; expression = {"$($line.endpoint):$($line.port)"}},
Subject,
Issuer,
NotBefore,
NotAfter,
@{label = "DaysLeft";expression={$daysleft.Days}},
@{label = "DNSNames";expression={$_.DnsNameList -join($delimiter)}}
}
#Получаем полный отчет
#full report
Write-Host "Full report" -ForegroundColor Green
Write-Output $report
#Отчет по сертификатам с валидностью меньше $triggerdays дней
#reports with expired certificates
Write-Host "Warning" -ForegroundColor Yellow
$report | Where-Object {$_.DaysLeft -lt $triggerdays}
Если в списке оставить только pop.rambler.ru с портом 995, то вывод будет следующим:
Скачать скрипт
Скрипт #3. Получаем цепочку сертификатов
Поможет проверить, есть ли риск отзыва SSL-сертификата.
Как это работает.
С помощью скрипта мы получаем все промежуточные и корневой сертификаты (то есть всю цепочку сертификатов) и имена всех субъектов сертификации. Затем проверяем, есть ли в этой цепочке CA, которые потенциально могут отозвать сертификат или отказать в его продлении. Для этого я собрал список отпечатков SHA1 (они доступны на сайтах удостоверяющих центров) — с ним и будем сравнивать.
Скрипт №3
function get-remotesslcertificate {
[CmdletBinding()]
param (
[Parameter(Mandatory=$true)]
[string]
$ComputerName,
[int]
$Port = 443
)
$Certificate = $null
$TcpClient = New-Object -TypeName System.Net.Sockets.TcpClient
try {
$TcpClient.Connect($ComputerName, $Port)
$TcpStream = $TcpClient.GetStream()
$Callback = { param($sender, $cert, $chain, $errors) return $true }
[System.Security.Authentication.SslProtocols]$protocol = "tls12"
$SslStream = New-Object -TypeName System.Net.Security.SslStream -ArgumentList @($TcpStream, $true, $Callback)
try {
$SslStream.AuthenticateAsClient($computername,$null,$protocol,$false)
$Certificate = $SslStream.RemoteCertificate
} finally {
$SslStream.Dispose()
}
} finally {
$TcpClient.Dispose()
}
if ($Certificate) {
if ($Certificate -isnot [System.Security.Cryptography.X509Certificates.X509Certificate2]) {
$Certificate = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Certificate2 -ArgumentList $Certificate
}
Write-Output $Certificate
}
}
#Для примера берем список узлов
#Сделано для удобства вставки текста напрямую из Excel или блокнота
[array]$list = @'
tproger.ru
veeam.com
rambler.ru
qna.habr.com
spb.hh.ru
'@ -split("`r`n")
#Указываем произвольное количество дней, чтобы отслеживать валидность
#trigger days to expire
$triggerdays = 140
#Для удобства формирования вывода задаем подходящий разделитель #списка
#Если вывод вы планируете парсить, в качестве разделителя лучше использовать ;
#set delimiter
$delimiter = "`n"
#Построчно указываем уникальные отпечатки SHA1 тех центров #сертификации, которые могут нас «забанить», чтобы сравнить их с #отпечатками сертификатов всей цепочки
[array]$blockedcas = @'
D4DE20D05E66FC53FE1A50882C78DB2852CAE474
5F43E5B1BFF8788CAC1CC7CA4A9AC6222BCC34C6
0563B8630D62D75ABBC8AB1E4BDFB5A899B24D43
A14B48D943EE0A0E40904F3CE0A4C09193515D3F
F517A24F9A48C6C9F8A200269FDC0F482CAB3089
8E934F88A5A4553336E29B5FB8666048EFAA8240
A8985D3A65E5E5C4B2D7D66D40C6DD2FB19C5436
DF3C24F9BFD666761B268073FE06D1CC8D4F82A4
7E04DE896A3E666D00E687D33FFAD93BE83D349E
5FB7EE0633E259DBAD0C4C9AE6D38F1A61C7DC25
3CA0E59C4D40ADCCC0B9C48CC6335F544E0A0116
DDFB16CD4931C973A2037D3FC83A4D7D775D05E4
17F3DE5E9F0F19E98EF61F32266E20C407AE30EE
A78849DC5D7C758C8CDE399856B3AAD0B2A57135
97817950D81C9670CC34D809CF794431367EF474
912198EEF23DCAC40939312FEE97DD560BAE49B1
843573112A3B319344E5E4ECABC9F26C7CD54D07
5EEED86FA37C675230642F55C84DDBF67CD33C80
323C118E1BF7B8B65254E2E2100DD6029037F096
8D1784D537F3037DEC70FE578B519A99E610D7B0
039EEDB80BE7A03C6953893B20D2D9323A4C2AFD
91C6D6EE3E8AC86384E548C299295C756C817B81
AADBBC22238FC401A127BB38DDF41DDB089EF012
F18B538D1BE903B6A6F056435B171589CAF36BF2
58D52DB93301A4FD291A8C9645A08FEE7F529282
26A16C235A2472229B23628025BC8097C88524A1
132D0D45534B6997CDB2D5C339E25576609B5CC6
22D5D8DF8F0231D18DF79DB7CF8A2D64C93F6C3A
4EB6D578499B1CCF5F581EAD56BE3D9B6744A5E5
3679CA35668772304D30A5FB873B0FA77BB70D54
B218FE6D07952A2207A35AFD5ED8E4991029E336
B60D92FC064D32AF1FEA30FCD85FB0243463A41C
1CB8A708C90D207901A0B2367FF09565E45324FE
5BC5ADE29AA754DA848953A5FED75B4686D05708
D1EEB1E8C09020BAB85D3DE27F78EE33A06CAEDB
87B8E6D38F1A39CD97F04A9E174B3C9EE7EE1115
19A09B5A36F4DD99727DF783C17A51231A56C117
28E96CDB1DBA273FD1A6151BE15F088F26046273
C619BE4F415453F46D020ED79F5D5CA5C37E14AD
59B244F3FF278C039D71CE7334B9D4D0241EC62B
409AA4A74A0CDA7C0FEE6BD0BB8823D16B5F1875
759540EAE3C302BC3E0E2443C1C2E435B52B8E8D
A9D53002E97E00E043244F3D170D6F4C414104FD
FB3A7F7C9DE73060094FB265E376F2CA86DA2340
FC20B60CADAC38D1FF40CF1B6EEF290F10B57ABD
56EE7C270683162D83BAEACC790E22471ADAABE8
60EE3FC53D4BDFD1697AE5BEAE1CAB1C0F3AD4E3
846896AB1BCF45734855C61B63634DFD8719625B
9D1FA05D51AD05BA9E5384C8022D908E8F54CBFC
54F84CF4B56C1A7944E60BDEBB6D4559E14C773C
F3D5B67A7E35A5332BFEB47F4B20CAA2292B4CDB
D6AEE31631F7ABC56B9DE8ABECCC4108A626B104
0753C9D48FE522C8134760A5149D4ED430130317
42857855FB0EA43F54C9911E30E7791D8CE82705
E308F829DC77E80AF15EDD4151EA47C59399AB46
DBC7E90B0DA5D88A5535430EEB665D077859E8E8
771FF8A19D15526B9DBD8934755A73FB23C7278B
E12D2E8D47B64F469F518802DFBD99C0D86D3C6A
92C1588E85AF2201CE7915E8538B492F605B80C6
7E2F3A4F8FE8FA8A5730AECA029696637E986F3F
F7E0F449F1A2594F88856C0758F8E6F627E5F5A2
A031C46782E6E6C662C2C87C76DA9AA62CCABD8E
02EF785428EC5BFBF1C1814FB42F229A0D2A3BAF
1FB86B1168EC743154062E8C9CC5B171A4B7CCB4
2EA5966C9A5B12E1AE7C9674AEFFDDA2222FB22F
F9AE40CCBBDA4795E58AC5D203BFB7BD331B81E8
C242C6785324854E346486DBF286C72FD035F0DD
876217035658B958F359FBA589D630C4042D961B
594F2DD10352C2360138EE35AA906F973AA30BD3
ED6302684A3259AA04F10FE9A97A8FD30B965D26
A399046417B67E320D3EFA69D7DCE6B8BFE8A9F2
7CCC2A87E3949F20572B18482980505FA90CAC3B
8B3C5B9B867D4BE46D1CB5A01D45D67DC8E94082
63B76FFF3B3864EEB549B1E37851D46B603FEDDC
98C6A8DC887963BA3CF9C2731CBDD3F7DE05AC2D
CBFE9EB43B3B37FE0DFBC4C2EB2D4E07D08BD8E8
9E848F52575C6B1A69D6AB62E0288BFAD4A5564E
4DEEA7060D80BABF1643B4E0F0104C82995075B7
C9FEFC763D9548B487696F047ACBA0ABE45C7BC1
090A16F9BA16001B2EC130F80523ESBSEB259158
687D4A4D47014F91217E4A062BBF9D238358943E
B0E6383FBDBFCE5E5F9D7934FAD0FC3C5E030F13
94D8797C449A29A8C7D45D35682E42DE0CD8638C
2471446048AF356F463C9F07D33C148BAEA5C68F
815CD8FF64BEACE07EF8F2F9D533011FA4793658
A3ADF237B25336EB479020491930BA8811A7899F
C43CCBD00E10A1D54E10AABF125D3AAC616560E5
2F7AA2D86056A8775796F798C481A079E538E004
9546387C13B2B9DAC48CBFC35439FE04D04922EE
9BD08A58876F6C849DB6BB99A8B194892647860E
75EAB86219B7A3F79225CCCAD7232C2603E8E9B5
626D44E704D1CEABE3BF0D53397464AC8080142C
1C58A3A8518E8759BF075B76B750D4F2DF264FCD
1D7322B41ED99FDD68511BAB786C8E26E0831B3B
AEC13CDD5EA6A3998AEC14AC331AD96BEDBB770F
9F90F8C8664B09959C2909AC9A78AEA8E26D88E8
C3BD4F375F3F41A5689A79B9C4A9A0ADCC4B30D4
8EA108B3DCF40C7A66050C9202E018CDA8413F9D
96B24A4064B35DC9A8B02BE12515F7CFA65F8885
7B0F360B775F76C94A12CA48445AA2D2A875701C
8F5C0C8E414AF89DBFF272125E28D417EE5FF559
0669D9AE862E9CFE2BA5B488EE72DBDCD4FAD041
231ACD6787B541F5590D943DF258569D7C6A02CE
8FB28DD3CFFA5D286E7C718AA907CB4F9B1767C2
83706D32A3DF8F02C485F8B3112DD2A412BC5799
7C770357099659B40DA4C4BA67785D5423A013C8
D1EB23A46D17D68FD92564C2F1F1601764D8E349
CCAB0EA04C2301D6697BDD379FCD12EB24E3949D
02FAF3E291435468607857694DF5E45B68851868
2AB628485E78FBF3AD9E7910DD6BDF99722C96E5
4D2378EC919539B5007F758F033B211EC54D8BCF
EE869387FFFD8349AB5AD14322588789A457B012
4A65D5F41DEF39B8B8904A4AD3648133CFC7A1D1
E19FE30E8B84609E809B170D72A8C5BA6E1409BD
EDC8ABFC394AB9ACEBAF6A15FFE841F47D7B921A
156EDC13920B58F3AA51EDE9D0B7317C8B4E9948
35D1CFDC14E8952E96C67C4EDE0B8C224943879D
1ACC5F54663D5572385C2F48E275FD25D3DA2120
C8760481F0DD1AD963FE851728ECCA3FB80E0929
3483F728A7B39221CF6781A119AE0C555986378D
F4B492F92F3A80B61C453D60A25DEC19468B37B2
8607CBB3A7F95410ADDDEE2803AD4528D83FEDCE
49100FACE81BC898D14EBC4C6C6149CF437DAA76
0DAD72CC220689F5CA9964AED6828A5F4C5AE159
CF040BAAE6F7C4CAF6B0BA88D7D5D001F4FA0CFD
714FC0240B1C3D6276C52D854F563F848C5995E7
0040A5E5DA9C1808F8F18CDAF1FC20BA1564F6AA
E79280B96086D6098EAEDDCC18C092491EAF0E4E
C23960E01EC0C229BC8A956EB11467E85B0AA4BC
0375861AFB6FCF30971DF32EF9F0DDE2C9BFF9E6
6549DC8CE02648061C67173E21D8B40DE3FDF127
C1671382F156A7BD6AC59FB93641868030A6992A
AB5B666E10F8813F456AE4749F7B57621F01A393
03AC82036F84C5F7305F5047156742CF531FAEA8
8A7EA1413B3BFE6A9E42D21958489BCE6FF5BD1D
61A8256C27F1C0558CA2EF472614910B80EE1A81
2C6F995A6F7B4E968CB1CD66056854FE533F12B5
03E859579E5B0DB2FBA394125B95B31A1A0A1D83
60109CDEB9815C559B55A966179949AEC212B4F8
638D6E6F4F9895FCF6029E560987F366983DB883
1633A19ADAB0931AE6225F7918437A89BE89BE07
3A0D686259DFBF59E530CD83F0D384E1057DAAF6
2AC10596DE0DCC745181A950B2FB23034856198C
03C8B739CAD8F1F737D2CDFB967F039C47D8C7F7
9E3DD94D3A67D2746324D0DDFA3666F42B53DE2B
BABAD141E11CC845DA516E6951FC107A562CA359
736DCC67D3F79F17E1EDCD3A8C9BCFA2F2007E7C
8B8C15B12C0974CE5ECB5B769C36DEA9EB7A7B40
FA41C36C97C8C1B46B0E570DD039733992067070
11955DCF836EA3246A8BD6E9C0D8DE2207B1BAE2
FF2A1B599875EA3C7D2ADAF7F5305272D4419E35
3D76F2A7052EB6341C225B82F8B949DBAEB36D20
EB140CF6C1F0D91CEC3EA625592C16323C17B098
A76EDD88C4D6894594B05391F3C366C9FA251A53
DE43B12A021046C6FE025937AED1F1E7670E2B70
E9D1F79A31277F6490440860F9C8B52C3021B37B
7ED8340BB202EC1D9710739667C7339E4850BFC1
A9122215F3E61BDF92D7B141D424A8DB7EF2818E
7BD4577413CFF214E1162E92E607A05486FECB9B
A006E5747EF1A80D3F58E7A74E03F96D06B8EE66
04027330A596C37D11056ADE58663DD383C3FCE5
743A6ABB22C6229FFFA58B258CB78F627E34D1AE
FA64F9B850FB2B9EF06BA0A50FF00A7CF97E4DC2
D06929EED88A5490F6C0C399149641530541483A
4C310D5DF23019417A7BB7912096295DDC97203C
D7D2737D35787C17A74CDCD03A3BC8943FA360E8
D8CEA9A69B2BE4AC1CD4FE5C9826D07A0EF68DE4
18F68CDBAAF552F2CF24C9479D91315E3914274D
3F4F96931CAB6270FD0FB579A5A2E0E8B94FA19A
9FB8E1DA315B5AFA048C98054F7E610894A2B882
9AE1E01243F70A6248A533D339695ABDBFBC434A
5563708F14E66212E78918EF91BA65FC307D2D44
5BAB80AFBABBCA4F80682F09F5858F9DECA987D2
4D39991934F4C04B4F4A48E3BECA02685F813236
6613D8A7737E3B80368940F7ED5EDA9C98AD110C
BD7321AE088F62EC3E39A539410A2FAFBC9E2637
A02ECF23FD9E2FF3880667B150B3DD030B126751
D2696925D72D40C5BCDB1DB4EA58530FFCD66251
05AF1C5FEA12CB1464BA7A11C4C80B8CDF7A1FC1
96E41C40348B5A0D77BF94DE072B71884A2339CE
EE869387FFFD8349AB5AD14322588789A457B012
314D3912A83D1D9613CAFB4DBBDC23F0CEE7B409
56C9BCD63169B37F188156168E7898403AC642E4
48E539175C9D3F4547133A653BE2FF6BCC735C2D
B1811371FC6966BCCA4E10729454FFEF4C14BDC3
16EE54E48C76EAA1052E09010D8FAEFEE95E5EBB
75CFD9BC5CEFA104ECC1082D77E63392CCBA5291
69EEF609CDCA01385D6D9CD14FA1FB8BE482F1A2
7ECE21DD57B3F5177B59BFACCA3435C66FF72EC9
CB24E1035B0054970670A4C789D6BDDA9C181418
D96F156371FEED5F5ABB29D2918592D99A110BE4
90D5105DF31E4C51254619DFB84447F353E81E33
5B4F376F01427F9A7DF3EDCFE86A1796986EB06C
E45DF0C4214EBC8B873242B8F887BD7898D189A5
6F7F18799D1B8F2D77309F3EE7900E173F5B4D02
1FD3162B47663DC1BEE0A6B1BF710585971E3AF8
FDF75758DA3185E6C6BA9FE15A4173EDBDA6EABE
8D4C4A23BA9EE84EA7348FA98CC6E65FBB69DE7B
705E800A291746C05A7AC6E7088BA966BC99CEBB
B69E752BBE88B4458200A7C0F4F5B3CCE6F35B47
339CDD57CFD5B141169B615FF31428782D1DA639
0BC249478F120F146D5714970A088A3A30C9ED07
D19F53211B0162532607EC1B863581305FFA490E
351A78EBC1B4BB6DC366728D334231ABA9AE3EA7
1F365C20E52AD2A6B09020A0E5539759C98DF8D0
3F84E5CA95CBD184FEB9DBBBFBB5F1A35DF8CBB4
104C63D2546B8021DD105E9FBA5A8D78169F6B32
EC2382F7DC9F06330406277E4F1BDB826DEE885E
A52B9369FF1FF60F7C06179654F2D5D886ACA75E
5DBAFB06715C7E327C9831AB354A88747E41344A
DCBBD14F544AC731C2231FD3F9B0BBC474D2600A
010B75726DB3C58F4682774269F9135B9D393198
2CA4C989FBB97EE866D56C089702AD1CA87B6400
93AD9C9CD02152C64040F8212614CD4727D056A1
43DF7B055F78ECC001599232613A3BEFBD3E076A
764D2FA59ED123F9C95570C403C92FEF338EA745
BBB8ADE70CE679C668463BC8CE7BD8399DD163BB
4E56E53A34D5951858B03569195C72949BCDA188
C55FCBC62CA7163744F2F845533A8FCD3077A30A
2E13487234F237A80671FD0DC0E60AE828C60555
BF198756BBBD4606086B1E6177F23FB56DF55B07
4BBEA4C2D56F1B5ED1A3755AA1DAA40A0B79CDB8
AF648AE953FBE423D72E227BC78ACADD5B226F6F
94FA31B79E38B20A90BE841DF5DE8BC5541AABF4
CE0C0BF4B97ACB5478EC582B25E7AA66DBA7E0FE
E3308C06B3776D8A893A5C8F8188DBD23F36C7CA
70608B40D0B776174A4ED85416582770B307B905
9D54E9A0DE59804F1A4101E877A2080EC2BB887D
7BAEFF8C68E6CC77EFF989728C8B5243DAF3F8B5
75268ED02F9BB20692AE1EA8D7A78BC01911585C
157FAA4B575C25FFB2D6B641D2E43067A90F7FF9
4010DB8FC48007B966FBBBAF89314D3B3A2D8DA4
7611CD06FCD459D58650A9055D4ADFC42D5944CB
0AF61AA1400809D1F612B53CE61961098B787767
8C9CC61AE33BD12859BF0AA883F86A360A6A2163
BCD8E131ABD98CC8C01F781E55B61F50B5FBB641
A051749F3E9D2804D771B2F1E0C8027544C996BB
E33D27CC1D41155AB9CF0450D27C5F17F8AC2F2E
ABFFB26DD6E0D1E4CA5E532C854B6A76E163F2EC
7BD7DEFCF34883C7B3B1B9A394F2AE94F14D8A85
F11276379476B0DC3A0651328E5F48B1E0DB13C3
82D9B3283887A78EDF087E0CF6DA6CBA1A6745B0
CE912E2EE8E147506D183694037929FCF1C0728E
24AA0DBCE6D92B5F9DCFC670C6EE7CA811A2BF4E
144B932B8016251B88C5D9B3BD0E51620144EE27
A4E3AAE02523B3E83EFBA9F5A194457A15EC094C
9AAA02BEAE6338F591BD15838E33C0B4447B4FA3
CE1710A80BD0DFB6ED688C37C8FC066268BD814B
BE128A987CC4C6A0CB3A4EA6A36DC60CC83F7FED
47312B8A43540189960F542AA42DD6B6B587D3DB
AA1E28DC508424DA2567D094A53E9C39AF7E1BD8
0A532CDBF8E0DE98C3AADD075329DFA472846A0B
40302FCEB1CA7795B9871ECAA1B7D334E0F9E41F
62073FF225C856318C84F2B1395E5871D44B4962
5B6AC0DA611E084329B87A46AB8121F602787359
44A22F552225F5EE5D7F832898334EB1200207A4
BB7F0FD5083112D9BCB6E2A35C5B8B204A52E7D6
EF6C68DDE05896655EF293CF05331F86FB17D8E6
EAF49077834D82235DD38E2F521AD63F7E569C73
121F08BFA981D3746ECB550657F6A0322A7AA172
ABECABA430770DFA73854DE8555B60E972BBB212
17BD9506AAAE7801CB27374EEEA6F7E64F20B9A8
7EC546F3BA8FD8D16F24A5A17BE93AC518E63A24
B6E227F098FC08C6164AC29CFA996012DDAFEEA2
C62DC9AE90E99B96A988F7044C91A9D0B3BF35B5
7252A1C518EF94AA0EC89D199378528C1C60CCB3
586D607480E6401CD6F778C40C82F624625F4947
49CC17D56AC2F952ECAC9FEBD8417FF195B88341
F9431E2E44E106A5BF1B767827165353934E8C4A
ECADDBD0D0D412D8815E1B9171ED7E4A183E3D1D
5554671BCE761E8E4CDD17DDF20CD51D077E0790
9EEF746217D6BF71020CA3D1FD268B234717469E
8C75E5781F0125C89DAEAB588EE27EA8692E0E69
663F329AD73DFE46EE30B1AD306E1C65CE23D343
7B6C5576739CEB8142DC81F1AF8C7EE2CC10121B
FA4FB2484E83FC109D168EFE3BE0E21E270C7EDB
A044CAB17C1491BD7E924CF6A9BBBFE25B4BE8F3
10C77D3F130400614CA9C4AE068D0C06063DF581
FC32477DA140D4E2D849A9E00824374A48662947
72276FA92754590CB824E8FAD4715975FA316B33
247106A405B288A46E70A0262717162D0903E734
534CD27BF6CACC7C72F9E0F40F06D748F2ED67BD
AD5F20A413B8315F1C5F0C9AED79C98315763306
9A933E0E07659752DAAD19B01C72CA89E4D2F9DA
E93B5FC1892B69316184F1DD1EA0C5F7716F8596
816A8A8C3DEDB3E85C4061B5A3856139109DFE0A
67BE49EDD179FC49177DB05C1FE847DE50868A36
0FA8188F72A156AD14530F76BFF0C73571D53155
8A63C019620165B85120C8DEB3362D0795020486
C2826E266D7405D34EF89762636AE4B36E86CB5E
E4D3066BD561F9CF92D125438BCDF21A50C3B15F
42D9EB484D6DEDF51525CA794466E97D7BA8E927
188B39CEEECB6E612E01B1F70BFD30035F703E28
263C1BA861350F3767F9A0652774BC6D03FEBCAF
01ED4F29ECCEF3110717C21D3E4498F409472C39
A3E0FB7EB38ADE229D5D7C33BD74DD0C62BED9B1
9219BF9ECE3D999A5D1F61BB4C9137DCBC92B3C8
4B9B82B565542082E0771F004DC0DE1E36DF9D8B
4CDB3CA20337E1FFCB6F1774C3F7D01FB4C79C76
D5C499A025552656830D43DC9898FC98B7A4877F
9BFC392E149E2DAE1EE95D4935460FB7577DA820
D6E0A87E68B8507CE86B7A1CB55E3439E83658B0
3D47641F2FBFCCA012DCC5D7ECF417D67AB5ADE4
E10EF1C63E2917432901069CF23B7A477DFCA8CD
D801A6C35B3A99777418009D582A93945EB5CEDA
AAD5B08F9A361C6195F93DE2D05380C5305CF28E
3669B628023E6B2E7053DBC6102E81DE716FCC41
7C04B5FDF11A158E8D895324B71FAB475A503CE2
A78740A1A3BB273EF8609F2348B59C7E3488F9A0
BE71950968995D30B579D8EDF7C2F732C76A33C7
BC09B1122F3C3061F0E9166A3BB22C6436977CF3
C3751F51A2A1F3B5BB8C37B024D82AE83CFA9C8D
63B8502CE5D1D432E9C75F2C737E97CD546B7A9B
63FA9E2C0E96B578FD4C904DEBE0C583294FEF57
62662A376B47FDED50A9CB3D316691B7C3903C3A
86E669C397F181F8B816A62450A73415E7F6B2CC
BFCFAF4662C3493D4CFB05759A0F34D4868A08CF
6C76A1BABA43BCCAEE1E34A9FA46665FDA43BD5A
45B82B775FD5FC5CE9904910676F64CC9EA211C1
423C4D044F069B6435BFFC896F368FD335D0EF36
F5F4B59FF6EB1516F32F47B85F42DAAD82A8AA6F
A00729B991C801A4E970929220300CBA45F0A440
67FC406B755AC198F0DFE4313157AE011222511B
8360BEACD4B4334CAB4208D3355F459F099486F0
070A726C6E4418DCF0213874F0C16D93B041E935
FD05E73DC9C71E02E4461D8E5C71DF7C6BC54C4C
7A6ACC1DA884DD30248488FA69557D3C5D5651EC
97E5CB413CE705A0DB1882F2CBC822D26710F67B
46C7401992CF5E2518F8CC8BF505FFE9F65EBC48
4645F5AB98C6E3EFD59BEE793F371086DDD7C260
F4F26A16D4B913CF3208E664E3DD384E56CE77AF
F5FB01DEA6E59CA6DD057054F4A3FF72DDE1D5C6
75107F3EF32EC5F1D2FC9EBE4F158237AE459B7C
02B2908CC07933817116063A72830012A2E72B22
97FE2A4C776C584565BC38BCB8B95F16CA64A8EE
38DAFCB661E4691200C916BE33859593F28759B2
1A38C37342190E96F33967BA9CA0F13B6BFBC70F
0D0E690EFF634B60AECE5663B6352D0D12589B06
0BDCDE67613F3D5F5BCD5A5E368118484A10022D
FD9725D22843091F8D61D5BD4242DF62DD7F3AE9
AFD335D34EB9C673D867EA441C99F3504A644063
10EE7ED28E5C63FDE1C4CB0F1D7CEC78CBD20D8E
65D97276BD73DFDD098DEB599C9B2A1996DB660D
9924E5214957AC3AC5E3BFE1E20F714CA1963C06
41E312CE9E4D27ABC7C90266B115DC70D4849C19
53969D17008385390859143FF6B5DCA2828079F2
236037C6984A62F3B40068113AF4D4F8BFFB3BAC
873D2BF7E405A66940627BE8BE3D53188C8A904B
6144A1072913A8E7572DC4BEA0E0056CCE2C10D1
E98548AD614069B6AAD3E25E8687546DA16B32CE
602C3FBD1A20D30BF764130B50D28876386F8E66
82AAEE91D12CAD6D30676C5210B00BF2236DCD21
2AD280D97B0719D024FC1FAB5C4A6E6A86F723CB
2ABD9AA74AFD75B5E68579BBC4E289FC95C16B07
1B55AD81148C4324CF428F6A6B84E7D22D60AAB2
D2D3DCBE5654B1DEB3C93FE6452BDC71BE93B9E2
827088A0C3127E89C6F72F373C5B3EF7E8A4125B
17661DFBA03E6AAA09142E012D216864F01D1F5E
9151B539751B891401C745A9DE301CBDBADF3FB6
377516ABDA1E249F3DAD9DCF120A6D2C2A5C89B7
90854CE574D03218DF2E7B4A054AA53F6951C1D2
ACABAFAB17A0B14180114EC0A22D712F994CD9C8
440FF68A35E03995AC55E457A67EB1680F9A7CDD
9332F54E27F32B32BF06D70F35CB4FDF6505597D
872FA06D68DB94F178D4F866C5441844D17C38D5
0488A2BAC10E233C8924338A8D55666E8058A161
1AC310BEF1FCF36E941B55ACD29DDCD2D00EE8ED
8A51339879AA673DC0246BDE374F099AFA6DB2E8
D46CFE2B2F6CBBE62B728A03ACA0239A633DD298
023E8E7D5F1FFB147F6C6AC233E4E2100B4C6900
BC43110E112A64798FDFCD8E1526E5ED57766FF4
A8667EDD559F9F7DA9F5BC1008D4467BF9B889A4
C16FF035657C7C638B02AE1753D7E3136A5F0624
D7F41F5F862E5F467B615152C107E53B43347A1D
3664D5D58C1A115DFC25B4D86DE65EE65269250B
9A6207A5FEE6225A300CA316DE4BFEF56BC9FC81
48C54232DA918B0B82357FED943F8194D6F0405E
B8DB2EC6797B19B9164393DA568ACF45DE07EB0F
3D5829DA0C230A03F1779EAA2FB344BC47A787D1
74D12DC2F6C67965BBC08A4C30FF005F044581E2
658B1B3F412A20F9394E77E93E91619E378AEB6C
B29C148AC5D146CA9CDB0905823AC9B7766F0039
878EE652D70FC6B7C819B3E00FAF4C5AC2DFC53A
4A9698A2E5B174E6FE81B2DFAC1BE9B5C7ECA4C6
4BEFF1E4579063AE72DA6CFA3C346FA122DBC469
F42BF6BE4C944BD0DA928421FE5E325162C08496
13C3862AF3C8A32FF40E1DB5488B368B8322FC7F
5317F0485013EE980537285EBF1347804EADE6C7
AD80F4F62DC55FBC61A63846D6570023567EA757
FBB92E68A6F877C4DD2FD8E74FA00F21F2995EE5
5B4994EBE1BB1371343525B6D4E8207FAEE9AB83
CD357605614F6BF555315B75DCE0E3F73BDAB3A5
B1819F88F65967EAEDFF615708C54F2BF832DEEC
533DA90FCA1A2AAA5BB1939E222DA9D9FE9A5195
0DC412DBC9BF0B4FCAC77A3B73AA07AA4FDEBD45
D8A76A01F14B626BCB388F53909BAF6B7298C0B4
5629E2AE7B02FCA1D84162913075679C8F2FD4FD
E84990CB9BF8E3AB0BCAE8A649CB30FE4DC4D767
F66529DF6177DF6A74911157B48A2668AB5F9962
56675261CC68026A1AB4F3EAE444FDE4C3A092C9
7A164F53AF93B80965FF9FDF446D5849B14B3FDA
C8AF0B661078FA075B5B4E80FF37E0597BC8CE93
9BE40CFC227CB8C81CBA3E3269C09C2F753E0F0D
31DF7C2685F9DB846C8BC8FC49B6C9E997BA8062
3BBB61A07435CD781BEDC637CDC9413FC4A6C674
E6332590A2D49E62E88B8632C74459307E6DA7EE
298DD33E8FC3EEEB5E9DC63D9E7E7B4B62F84383
07E6EF24E163E2F6166BFB10582288C9BC5370B5
329B78A5C9EBC2043242DE90CE1B7C6B1BA6C692
9FC32441F3E04946432D86E81A99F96718B9738D
D534700973D8D44EF041E47891D9A16482C657A4
4CE9E54D353BD97238CF551F10A35AEDDDBE6504
237014489151D07CE77A21061083D00FC5CF93F7
A9215DBCB4186C547DCA291B888FF30D966573C5
94C95DA1E850BD85209A4A2AF3E1FB1604F9BB66
D772DA0874059418FCDAACE3F4FF2AC964A852FF
BA1C718242F1B46611C8425BFF6F7AA04F381FCA
33E4E80807204C2B6182A3A14B591ACD25B5F0DB
64D253D88595176B07079E89775176834214B86F
A3DF966D0CB2D84AF8F16C855B97C49364F5D8C0
40CEF3046C916ED7AE557F60E76842828B51DE53
956A6D75483E2BBF7B68B6A3E7213A0EF4181157
02D65B95E28370C1570095FA88F923DD937FAD8F
4705E9B8F1C9E1ADDCD937976297B082765BA3DC
AA950AAD16265917F7DADA5D662F778FB00F82D9
1F7790399A1DABF825E594D113A16207D025BF15
94F162B98A4EE6EFD189829C8E446B02E3040F58
E5C8EA53E49D5A977DAD56AD14BB0D2A61A66491
4CC0BF9C4B987E22F38A6036B143272BCC136063
19DD644AE504F8A1FE5828AF1ED9AD4981DB6209
B527840A212DD4F9B31E20C8ADB1E6BBF65E5D42
A37A21E728AB28240FC9FE3B7C8EEFC0526BA702
239A6B191FAE13FBCF57DBEB753DD6C3E3D728F3
59A08D6E9521370D87CB940AC851075957429097
799BCA97824C88027A7EE452A852F8605E14EFF1
E41F899E73D75DB8215A8636BD8D71065357A547
60A801B346164B6153D75D33ABB3623A0D7CC4A1
63A5C713AF0234AAAD44C486D72ED28530DB49F0
C10C45EF19C80B4C1E766C85EBFBE08F0C1621DC
6B8D76DA69A25160E5D6710C350153BF260FBF9E
50CF0E88EA5C729582753A5AAED2CC7CD1F7DA3A
B773C7022AC5462FA35F4A174B11039738A926C3
C69BF80251259982D5A5AD376A11F88F315ED4A7
98CBBD74D3F49DFFB7D0F4D7A2AEB6F408B16070
A9D6C26549CD6AFF623268033FEBA9972DD7D52E
621C64AF3FCF629AD39F66E90FCAD52575C72D92
FEDC60489C682D1EA555DBBFDC1407193EF9668F
225DCB787E5ED5C999FFA6E21D1D7951151A4659
8A8B7ADD83356C4CE6752837F626B5059F5B54C4
0B2280EF840ADF325520B70D8785512F5148A21F
F64B6A9972A8431D67334E9AD7B0EF61DC05568E
39F1296A956B7BF8890736E528E079043A6DEC51
E63B70066CAD59472F71A28BD855BBC6FC5953A1
16943A59FB412FB8B162616E2A38B1F799FA2FED
B6A4F662D11FE5FD41551C3A990EF9D19008AD9F
04A79EE453BE3270ABB82AB8D76F375F071A4BBE
B6A3745B580EAA12156797FC7024D41ACCE6913F
E400A8BF048C58EA28EDBC68CCC687C86FB8E94F
034CA46B8B3D30493751A2FD7C5C1F25C590657F
0965F952D2D60172CD843C3DA0587EB01F5608BC
1893205276C4448E00ECBD613E5FC75CB672ACC9
4D9982C9433EAB28F8B13083A8BE539683B99859
046AA16D28967A45B2E510985DB4E97755CB47D1
7CF0F32C72044A017E7C8713689475579237A5BD
8A3455B4DEA65DC4B252D2945240CC070CC7D4E4
1CCDA0E13FAEEBFA311DBC1048FB28540394AAD7
F222201E88F57605166FD013BD6AE0B55B9080C6
6F1DD38152858D067BAB9A76C1519C167619BA77
38525C7140D285040E02DD2A7F3C7DBA21042E01
328925461F4AC00F4F56C04F8C910747736412F4
E859530DA7D703D60C8F7266F6C185064F6A1163
D782515E87BE217CCBA9756F7119D7178908404D
10F0F1E452B8D07183D02AC3DF97D0911E98473F
30689DC2681EBCE0E5BB56C0D3E911977850C5A3
3E8C75C5FD74FF3C3982EBB40CC55061536CDBF8
06035EFCB0B44637E58792AA9542B03B3EFC5E9E
DCB5B1F4AD57503D8848A03B04B8A24CCB88AEBD
FF2EBF2ECE71D2701B31F21FB7DF7724B9FCCB0F
B6BF99083A40E79BB0759FA01EBC6A1EA4BD133C
30EDCDA37AAA6783E150F06BB9210A7AABCBE5F0
F25444F0ED9FA9FC4100EFF73396B8DC1328CAE8
8A8C3F4422580DC6D310BEFC77B78700F221B9C2
86C797712FADFDC412856727C1D4E014162FF37A
6A358A037C23F9D3953522479ADFB673821DFE0E
F34DDECF3EA10BD2E2F6308ED1CE537B093578B3
AC97D4A7CC76EB8B73EF6F231B3EEE144DF128A3
E1400C1EB5DBF7AAD5E8AD740F749A6ED479A8C1
1EB0B157FD04A2D3A53C014F27C117C3A4DCD8F3
E2CC0C66BF6B8BDED6C627B512AA25F778BCBF06
F720E347B8264EDE664EA67F9FDB7903BC80AA72
7714106DD46511A6F1E4E1CF4B66378E5849446B
525C47FB3A5E0655FBD4BE963CA1E94D5FECB43D
9B8B0AF7E12F6C4FC6C2F82DBFD55BBA4700E8FC
F6715A5E1669B18194CD53355E632C26EAFF6D39
4874CCFC108EF73667C5A11B0BAB84746017F2E6
112325A40E1807575D205350C75D5FE4213438C5
246EFBB8B71927A0D2F2B726508E8F3A3D42EA51
A729C1982468C774021614EE8ECA0B7B781B51C7
78274C6D3B56C2C28F8A9240F7543A3C1A27A136
42B2BECED24A95A5D537F796CF50168C5413F8B5
529455C83DB706559EA0A8059734E2C2C5AFA874
E21E9FB57BA6DF8F7484ABCDCFAD9ACE88917FF4
D3E28308711C7E539EBEB56D2EEDE88F7223BA79
BF357F4EC7A882B1CFE95BBAC1F2545E3CB1BFFA
D01F069332C8BC4D6B7C4AEB976E7FD5A30285C9
B9426DD6B85B3DF7F1581664672E5D14C40A3C67
D0B4C941A0C14727391705A22D198AA85637C0C0
8FDA235CFD5128B35540A2544323976979BF895D
6E711E4FBF0ED0BC918B59CB5D5F3ED24B2F4F4A
CD2DC5275D6A395C67E060FFC8B427C002A737B6
3FF48021FA0B01C16241CD6A9BC5923D44A38B70
D18ED865749FA0628112E71C73F011CEB04427C4
FAF76441F498E5DEC5C9338D9777A99247537D51
CD989334843A511A09B96BF3F2697F62C9902F07
6553216A9AF7AB34C4ECD94BC0EFFB4BC532980D
B04D70B04B4CAE0B5F86123E4CC2E3649B3DA5F1
B999BA2A89DE4002ECF0C80F2B5745D99D2574D9
3E2A08AFB111416CCD72BD3219C77A0BCE14178F
5B6B71AA17E1CA58CF7723004C71AB2FE5B32123
C1040087E622BB8E4C68036B705FF30028E2C3E6
ECA4EEDBED3A106C10652A574867E383AB8B5F19
0B4D7553A447AFC83F0ED8225A29AE9759D1C266
47961937B34CE2D12BBD2E8AB5CC96C4C493746F
4A37354A2ABC24171D5AC0D77153E44C1A5875B5
1E3451A465717D2F9A5F86359289C347D10D9F7A
BCC4B7595B73CF0757E7D320549433FE8BA9D142
88BC8673305BB0C0A0EB652751D432F285B939A3
4139CE95C5374A14A04A1C15FAEEB0177088FD2C
CA7788C32DA1E4B7863A4FB57D00B55DDACBC7F9
0FB07E231155FF10449B8AA1C7CB22B354C2E666
8D594750CAF5182039A1B516EDA712F3DCAE6339
5D6A96FF68706273E913557462889487D08F89FB
4B4C0E215FCF5B3B8668F48A2EA8A9D2AB0EA5DF
FA3B3B3C48A28F0A689C56D633554420F70899E3
5169A985192D17D5682C1D3126BBFEB1FFD434B6
1F2DBC87A8F4DDBD40D9669DEC65A9053427469A
D89E3BD43D5D909B47A18977AA9D5CE36CEE184C
BBABF44B42207395684605B5602C9D56A5508BE1
1874EAFEE7E813B46CF9433C16FEEC7FD2BCF5D9
41EEAD7050191684912D2CF03AD63596EF2E4976
30CA5A9B918ACA4F8970973CB9375AFC09079E2D
AF6686749E649FB78A378CF531933353A84D38DE
E59C6DDA590A3CEB0011552460D02E98F41F27BC
8A01E30004366B97983F9CB9031DE54645CBB6A5
E6A67AFD553B5BCBE901AAB10FA94CA82566BC27
497FAC9F8FBC810956B8FA9038B8BE150485A13C
71F8E304C692E7FCF92A17F7B0A58158656A8E94
8C2B91EFABDAC3A416066EFE2A5871AAEFF8B522
65EF1579BFC4C985EA0B2320CBF2112D6697EA3B
0B6D74B3473E21F1FD25B3F6CAFE08E65DDA9973
994BE9C30DC76DD942CE6E8C7451FD524B92DF0B
831A7F9360F7919A763E35C54A1752965BB1CAED
7C6749FDD405FBADC212D4C7B8C392129023EE26
DD46BCF1C81ED6D3D7894433608CAE682B7E20CC
E1303E8487837AAAE34BB55970F453EEB5270405
E036F01AD90C1F30FFC3C11CA337AFF9AEAD6BE7
7A5DFB3682476707C3FF0D9DEF4505DE54F1711E
B15679FD0AC8671DD99ABC2D6CACD9128EDEBAE7
D4E638A4BE992EB0411FA7595E293092EEC72224
7CF0A2CFADA67D1C09D531337D47B5F94D0E3CFA
447DC985D1B7D41A565A717AC9B0C85C8BE5A6E0
D9C8CABA980A4D6B90216097775092E0A6EFEE73
BC8A5EBDE6AE1467B56125FD112B09C14C278EAF
1A354290CFDC6883242183BF3FE7CCA3140AEADA
4334C8323E735ADFCB028B17F72913680C43DD15
A042A852961B90D5867591D0EA2B996CB9ECFEF1
BC0A6EE6C66080FD39EB82DC3325816B620DD15F
0F888036AC14BE902F9A5558A8851DCD21CE934A
D6970548458554A6F70AF2FC542024147ED504CE
7F95276D4951499FD756DF344AA24FB38CEAF678
627AD24E2334E200BE6686D73C2CEE2233E460BA
FB78E8CBEB088FE7CA8EFD72ABB73DA4EDFDBD59
C81A8BD1F9CF6D84C525F378CA1D3F8C30770E34
4C7EF252A701E802E3607881901CB30A6D2BA75E
FF993FA3F9C3DB1BC5579094386085481EBBDF45
46331F63BFA0F3BA30DBFE833F4829A8D1DC9B3A
8A7C8E8A1D8B1DE53E844D0E7C1B798740A811DE
606E301E28ED2ABD56D1746E7851A12FF60BE2FD
E54A8FDB49048DD987C27C6AFE6177569C08D770
0D91909AF3F28DAD8B0342EDACE84EB18F0A7FE9
4F9D205F580FC32FCD82A65A39C3799429EE69FE
EC102C8C7E69FAA38A4467159804EC3F50996104
91C6D6EE3E8AC86384E548C299295C756C817B81
AADBBC22238FC401A127BB38DDF41DDB089EF012
F18B538D1BE903B6A6F056435B171589CAF36BF2
FA7CFBB247427763431B7E6D75812A49CC8D30E4
20CEB1F0F51C0E19A9F38DB1AA8E038CAA7AC701
'@ -split("`r`n")
$report = @()
foreach ($line in $list){
$certificate = get-remotesslcertificate $line
$chain = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Chain
$chain.Build($certificate) | Out-Null
$daysleft = New-TimeSpan -Start (Get-Date) -End $certificate.NotAfter
$chainarray = @()
for ([int]$i = 1;$i -le $chain.ChainElements.Count;$i++){
#get cert type
if ($i -eq 1){$certtype = 'Personal'}
elseif ($i -gt 1 -and $i -lt $chain.ChainElements.Count){$certtype = 'Intermediate'}
elseif ($i = $chain.ChainElements.Count){$certtype = 'Root'}
#find thumbprints in blocklist
if ($blockedcas -contains $chain.ChainElements[$i-1].Certificate.Thumbprint){$blocked = '!!Blocked by this CA!!'}
else {$blocked = 'Not Blocked by this CA'}
$chainarray += $chain.ChainElements[$i-1].Certificate | Select-Object @{label = 'BlockStatus'; expression = {if ($certtype -eq 'Personal'){'Not Applicable'} else {$blocked}}},
@{label = 'CertType';expression = {$certtype}},
Subject
}
$chainout = $chainarray | ForEach-Object {$_ | Select-Object @{label = 'out'; expression = {"$($_.BlockStatus);$($_.CertType);$($_.Subject)"}}} | select -ExpandProperty out
$report += $certificate | Select-Object Subject,
Issuer,
NotBefore,
NotAfter,
@{label = "DaysLeft";expression={$daysleft.Days}},
@{label = "DNSNames";expression={$_.DnsNameList -join($delimiter)}},
@{label = 'CertChain'; expression = {$chainout -join($delimiter)}}
}
#Получаем полный отчет
#full report
Write-Host "Full report" -ForegroundColor Green
Write-Output $report
#Отчет по сертификатам с валидностью меньше $triggerdays дней и #блокировкам
#reports with expired/blocked certificates
Write-Host "Warning" -ForegroundColor Yellow
$report | Where-Object {$_.DaysLeft -lt $triggerdays -or $_.CertChain -match "!!Blocked by this CA!!"}
Если в списке оставить только qna.habr.com, то вывод будет следующим:
Указан !!Blocked by this CA!!, так как отпечаток SHA1 этого CA присутствует в списке CA, которые могут нам потенциально отказать.
Скачать скрипт
Скрипт #4. Получаем цепочку сертификатов по кастомному порту
Работает так же, как и предыдущий скрипт, но позволяет делать проверку по конкретному порту.
Скрипт №4
function get-remotesslcertificate {
[CmdletBinding()]
param (
[Parameter(Mandatory=$true)]
[string]
$ComputerName,
#Порт по умолчанию
[int]
$Port = 443
)
$Certificate = $null
$TcpClient = New-Object -TypeName System.Net.Sockets.TcpClient
try {
$TcpClient.Connect($ComputerName, $Port)
$TcpStream = $TcpClient.GetStream()
$Callback = { param($sender, $cert, $chain, $errors) return $true }
[System.Security.Authentication.SslProtocols]$protocol = "tls12"
$SslStream = New-Object -TypeName System.Net.Security.SslStream -ArgumentList @($TcpStream, $true, $Callback)
try {
$SslStream.AuthenticateAsClient($computername,$null,$protocol,$false)
$Certificate = $SslStream.RemoteCertificate
} finally {
$SslStream.Dispose()
}
} finally {
$TcpClient.Dispose()
}
if ($Certificate) {
if ($Certificate -isnot [System.Security.Cryptography.X509Certificates.X509Certificate2]) {
$Certificate = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Certificate2 -ArgumentList $Certificate
}
Write-Output $Certificate
}
}
#формируем коллекцию объектов
#Создаем пустой объект с определенными свойствами
#Далее их заполняем
#Обратите внимание: здесь указываются эндпоинты и кастомные порты #к ним
#get list of web sites
$list = @()
$site1 = ''| Select-Object endpoint, port
$site1.endpoint = "pop.rambler.ru"
$site1.port = "995"
$list += $site1
$site2 = ''| Select-Object endpoint, port
$site2.endpoint = "imap.rambler.ru"
$site2.port = "993"
$list += $site2
$site3 = ''| Select-Object endpoint, port
$site3.endpoint = "habr.com"
$site3.port = "443"
$list += $site3
#Указываем произвольное количество дней, чтобы отслеживать валидность
#trigger days to expire
$triggerdays = 140
#Для удобства формирования вывода задаем подходящий разделитель #списка
#Если вывод вы планируете парсить, в качестве разделителя лучше использовать ;
#set delimiter
$delimiter = "`n"
#Построчно указываем уникальные отпечатки SHA1 тех центров #сертификации, которые могут нас «забанить», чтобы сравнить их с #отпечатками сертификатов всей цепочки
[array]$blockedcas = @'
D4DE20D05E66FC53FE1A50882C78DB2852CAE474
5F43E5B1BFF8788CAC1CC7CA4A9AC6222BCC34C6
0563B8630D62D75ABBC8AB1E4BDFB5A899B24D43
A14B48D943EE0A0E40904F3CE0A4C09193515D3F
F517A24F9A48C6C9F8A200269FDC0F482CAB3089
8E934F88A5A4553336E29B5FB8666048EFAA8240
A8985D3A65E5E5C4B2D7D66D40C6DD2FB19C5436
DF3C24F9BFD666761B268073FE06D1CC8D4F82A4
7E04DE896A3E666D00E687D33FFAD93BE83D349E
5FB7EE0633E259DBAD0C4C9AE6D38F1A61C7DC25
3CA0E59C4D40ADCCC0B9C48CC6335F544E0A0116
DDFB16CD4931C973A2037D3FC83A4D7D775D05E4
17F3DE5E9F0F19E98EF61F32266E20C407AE30EE
A78849DC5D7C758C8CDE399856B3AAD0B2A57135
97817950D81C9670CC34D809CF794431367EF474
912198EEF23DCAC40939312FEE97DD560BAE49B1
843573112A3B319344E5E4ECABC9F26C7CD54D07
5EEED86FA37C675230642F55C84DDBF67CD33C80
323C118E1BF7B8B65254E2E2100DD6029037F096
8D1784D537F3037DEC70FE578B519A99E610D7B0
039EEDB80BE7A03C6953893B20D2D9323A4C2AFD
91C6D6EE3E8AC86384E548C299295C756C817B81
AADBBC22238FC401A127BB38DDF41DDB089EF012
F18B538D1BE903B6A6F056435B171589CAF36BF2
58D52DB93301A4FD291A8C9645A08FEE7F529282
26A16C235A2472229B23628025BC8097C88524A1
132D0D45534B6997CDB2D5C339E25576609B5CC6
22D5D8DF8F0231D18DF79DB7CF8A2D64C93F6C3A
4EB6D578499B1CCF5F581EAD56BE3D9B6744A5E5
3679CA35668772304D30A5FB873B0FA77BB70D54
B218FE6D07952A2207A35AFD5ED8E4991029E336
B60D92FC064D32AF1FEA30FCD85FB0243463A41C
1CB8A708C90D207901A0B2367FF09565E45324FE
5BC5ADE29AA754DA848953A5FED75B4686D05708
D1EEB1E8C09020BAB85D3DE27F78EE33A06CAEDB
87B8E6D38F1A39CD97F04A9E174B3C9EE7EE1115
19A09B5A36F4DD99727DF783C17A51231A56C117
28E96CDB1DBA273FD1A6151BE15F088F26046273
C619BE4F415453F46D020ED79F5D5CA5C37E14AD
59B244F3FF278C039D71CE7334B9D4D0241EC62B
409AA4A74A0CDA7C0FEE6BD0BB8823D16B5F1875
759540EAE3C302BC3E0E2443C1C2E435B52B8E8D
A9D53002E97E00E043244F3D170D6F4C414104FD
FB3A7F7C9DE73060094FB265E376F2CA86DA2340
FC20B60CADAC38D1FF40CF1B6EEF290F10B57ABD
56EE7C270683162D83BAEACC790E22471ADAABE8
60EE3FC53D4BDFD1697AE5BEAE1CAB1C0F3AD4E3
846896AB1BCF45734855C61B63634DFD8719625B
9D1FA05D51AD05BA9E5384C8022D908E8F54CBFC
54F84CF4B56C1A7944E60BDEBB6D4559E14C773C
F3D5B67A7E35A5332BFEB47F4B20CAA2292B4CDB
D6AEE31631F7ABC56B9DE8ABECCC4108A626B104
0753C9D48FE522C8134760A5149D4ED430130317
42857855FB0EA43F54C9911E30E7791D8CE82705
E308F829DC77E80AF15EDD4151EA47C59399AB46
DBC7E90B0DA5D88A5535430EEB665D077859E8E8
771FF8A19D15526B9DBD8934755A73FB23C7278B
E12D2E8D47B64F469F518802DFBD99C0D86D3C6A
92C1588E85AF2201CE7915E8538B492F605B80C6
7E2F3A4F8FE8FA8A5730AECA029696637E986F3F
F7E0F449F1A2594F88856C0758F8E6F627E5F5A2
A031C46782E6E6C662C2C87C76DA9AA62CCABD8E
02EF785428EC5BFBF1C1814FB42F229A0D2A3BAF
1FB86B1168EC743154062E8C9CC5B171A4B7CCB4
2EA5966C9A5B12E1AE7C9674AEFFDDA2222FB22F
F9AE40CCBBDA4795E58AC5D203BFB7BD331B81E8
C242C6785324854E346486DBF286C72FD035F0DD
876217035658B958F359FBA589D630C4042D961B
594F2DD10352C2360138EE35AA906F973AA30BD3
ED6302684A3259AA04F10FE9A97A8FD30B965D26
A399046417B67E320D3EFA69D7DCE6B8BFE8A9F2
7CCC2A87E3949F20572B18482980505FA90CAC3B
8B3C5B9B867D4BE46D1CB5A01D45D67DC8E94082
63B76FFF3B3864EEB549B1E37851D46B603FEDDC
98C6A8DC887963BA3CF9C2731CBDD3F7DE05AC2D
CBFE9EB43B3B37FE0DFBC4C2EB2D4E07D08BD8E8
9E848F52575C6B1A69D6AB62E0288BFAD4A5564E
4DEEA7060D80BABF1643B4E0F0104C82995075B7
C9FEFC763D9548B487696F047ACBA0ABE45C7BC1
090A16F9BA16001B2EC130F80523ESBSEB259158
687D4A4D47014F91217E4A062BBF9D238358943E
B0E6383FBDBFCE5E5F9D7934FAD0FC3C5E030F13
94D8797C449A29A8C7D45D35682E42DE0CD8638C
2471446048AF356F463C9F07D33C148BAEA5C68F
815CD8FF64BEACE07EF8F2F9D533011FA4793658
A3ADF237B25336EB479020491930BA8811A7899F
C43CCBD00E10A1D54E10AABF125D3AAC616560E5
2F7AA2D86056A8775796F798C481A079E538E004
9546387C13B2B9DAC48CBFC35439FE04D04922EE
9BD08A58876F6C849DB6BB99A8B194892647860E
75EAB86219B7A3F79225CCCAD7232C2603E8E9B5
626D44E704D1CEABE3BF0D53397464AC8080142C
1C58A3A8518E8759BF075B76B750D4F2DF264FCD
1D7322B41ED99FDD68511BAB786C8E26E0831B3B
AEC13CDD5EA6A3998AEC14AC331AD96BEDBB770F
9F90F8C8664B09959C2909AC9A78AEA8E26D88E8
C3BD4F375F3F41A5689A79B9C4A9A0ADCC4B30D4
8EA108B3DCF40C7A66050C9202E018CDA8413F9D
96B24A4064B35DC9A8B02BE12515F7CFA65F8885
7B0F360B775F76C94A12CA48445AA2D2A875701C
8F5C0C8E414AF89DBFF272125E28D417EE5FF559
0669D9AE862E9CFE2BA5B488EE72DBDCD4FAD041
231ACD6787B541F5590D943DF258569D7C6A02CE
8FB28DD3CFFA5D286E7C718AA907CB4F9B1767C2
83706D32A3DF8F02C485F8B3112DD2A412BC5799
7C770357099659B40DA4C4BA67785D5423A013C8
D1EB23A46D17D68FD92564C2F1F1601764D8E349
CCAB0EA04C2301D6697BDD379FCD12EB24E3949D
02FAF3E291435468607857694DF5E45B68851868
2AB628485E78FBF3AD9E7910DD6BDF99722C96E5
4D2378EC919539B5007F758F033B211EC54D8BCF
EE869387FFFD8349AB5AD14322588789A457B012
4A65D5F41DEF39B8B8904A4AD3648133CFC7A1D1
E19FE30E8B84609E809B170D72A8C5BA6E1409BD
EDC8ABFC394AB9ACEBAF6A15FFE841F47D7B921A
156EDC13920B58F3AA51EDE9D0B7317C8B4E9948
35D1CFDC14E8952E96C67C4EDE0B8C224943879D
1ACC5F54663D5572385C2F48E275FD25D3DA2120
C8760481F0DD1AD963FE851728ECCA3FB80E0929
3483F728A7B39221CF6781A119AE0C555986378D
F4B492F92F3A80B61C453D60A25DEC19468B37B2
8607CBB3A7F95410ADDDEE2803AD4528D83FEDCE
49100FACE81BC898D14EBC4C6C6149CF437DAA76
0DAD72CC220689F5CA9964AED6828A5F4C5AE159
CF040BAAE6F7C4CAF6B0BA88D7D5D001F4FA0CFD
714FC0240B1C3D6276C52D854F563F848C5995E7
0040A5E5DA9C1808F8F18CDAF1FC20BA1564F6AA
E79280B96086D6098EAEDDCC18C092491EAF0E4E
C23960E01EC0C229BC8A956EB11467E85B0AA4BC
0375861AFB6FCF30971DF32EF9F0DDE2C9BFF9E6
6549DC8CE02648061C67173E21D8B40DE3FDF127
C1671382F156A7BD6AC59FB93641868030A6992A
AB5B666E10F8813F456AE4749F7B57621F01A393
03AC82036F84C5F7305F5047156742CF531FAEA8
8A7EA1413B3BFE6A9E42D21958489BCE6FF5BD1D
61A8256C27F1C0558CA2EF472614910B80EE1A81
2C6F995A6F7B4E968CB1CD66056854FE533F12B5
03E859579E5B0DB2FBA394125B95B31A1A0A1D83
60109CDEB9815C559B55A966179949AEC212B4F8
638D6E6F4F9895FCF6029E560987F366983DB883
1633A19ADAB0931AE6225F7918437A89BE89BE07
3A0D686259DFBF59E530CD83F0D384E1057DAAF6
2AC10596DE0DCC745181A950B2FB23034856198C
03C8B739CAD8F1F737D2CDFB967F039C47D8C7F7
9E3DD94D3A67D2746324D0DDFA3666F42B53DE2B
BABAD141E11CC845DA516E6951FC107A562CA359
736DCC67D3F79F17E1EDCD3A8C9BCFA2F2007E7C
8B8C15B12C0974CE5ECB5B769C36DEA9EB7A7B40
FA41C36C97C8C1B46B0E570DD039733992067070
11955DCF836EA3246A8BD6E9C0D8DE2207B1BAE2
FF2A1B599875EA3C7D2ADAF7F5305272D4419E35
3D76F2A7052EB6341C225B82F8B949DBAEB36D20
EB140CF6C1F0D91CEC3EA625592C16323C17B098
A76EDD88C4D6894594B05391F3C366C9FA251A53
DE43B12A021046C6FE025937AED1F1E7670E2B70
E9D1F79A31277F6490440860F9C8B52C3021B37B
7ED8340BB202EC1D9710739667C7339E4850BFC1
A9122215F3E61BDF92D7B141D424A8DB7EF2818E
7BD4577413CFF214E1162E92E607A05486FECB9B
A006E5747EF1A80D3F58E7A74E03F96D06B8EE66
04027330A596C37D11056ADE58663DD383C3FCE5
743A6ABB22C6229FFFA58B258CB78F627E34D1AE
FA64F9B850FB2B9EF06BA0A50FF00A7CF97E4DC2
D06929EED88A5490F6C0C399149641530541483A
4C310D5DF23019417A7BB7912096295DDC97203C
D7D2737D35787C17A74CDCD03A3BC8943FA360E8
D8CEA9A69B2BE4AC1CD4FE5C9826D07A0EF68DE4
18F68CDBAAF552F2CF24C9479D91315E3914274D
3F4F96931CAB6270FD0FB579A5A2E0E8B94FA19A
9FB8E1DA315B5AFA048C98054F7E610894A2B882
9AE1E01243F70A6248A533D339695ABDBFBC434A
5563708F14E66212E78918EF91BA65FC307D2D44
5BAB80AFBABBCA4F80682F09F5858F9DECA987D2
4D39991934F4C04B4F4A48E3BECA02685F813236
6613D8A7737E3B80368940F7ED5EDA9C98AD110C
BD7321AE088F62EC3E39A539410A2FAFBC9E2637
A02ECF23FD9E2FF3880667B150B3DD030B126751
D2696925D72D40C5BCDB1DB4EA58530FFCD66251
05AF1C5FEA12CB1464BA7A11C4C80B8CDF7A1FC1
96E41C40348B5A0D77BF94DE072B71884A2339CE
EE869387FFFD8349AB5AD14322588789A457B012
314D3912A83D1D9613CAFB4DBBDC23F0CEE7B409
56C9BCD63169B37F188156168E7898403AC642E4
48E539175C9D3F4547133A653BE2FF6BCC735C2D
B1811371FC6966BCCA4E10729454FFEF4C14BDC3
16EE54E48C76EAA1052E09010D8FAEFEE95E5EBB
75CFD9BC5CEFA104ECC1082D77E63392CCBA5291
69EEF609CDCA01385D6D9CD14FA1FB8BE482F1A2
7ECE21DD57B3F5177B59BFACCA3435C66FF72EC9
CB24E1035B0054970670A4C789D6BDDA9C181418
D96F156371FEED5F5ABB29D2918592D99A110BE4
90D5105DF31E4C51254619DFB84447F353E81E33
5B4F376F01427F9A7DF3EDCFE86A1796986EB06C
E45DF0C4214EBC8B873242B8F887BD7898D189A5
6F7F18799D1B8F2D77309F3EE7900E173F5B4D02
1FD3162B47663DC1BEE0A6B1BF710585971E3AF8
FDF75758DA3185E6C6BA9FE15A4173EDBDA6EABE
8D4C4A23BA9EE84EA7348FA98CC6E65FBB69DE7B
705E800A291746C05A7AC6E7088BA966BC99CEBB
B69E752BBE88B4458200A7C0F4F5B3CCE6F35B47
339CDD57CFD5B141169B615FF31428782D1DA639
0BC249478F120F146D5714970A088A3A30C9ED07
D19F53211B0162532607EC1B863581305FFA490E
351A78EBC1B4BB6DC366728D334231ABA9AE3EA7
1F365C20E52AD2A6B09020A0E5539759C98DF8D0
3F84E5CA95CBD184FEB9DBBBFBB5F1A35DF8CBB4
104C63D2546B8021DD105E9FBA5A8D78169F6B32
EC2382F7DC9F06330406277E4F1BDB826DEE885E
A52B9369FF1FF60F7C06179654F2D5D886ACA75E
5DBAFB06715C7E327C9831AB354A88747E41344A
DCBBD14F544AC731C2231FD3F9B0BBC474D2600A
010B75726DB3C58F4682774269F9135B9D393198
2CA4C989FBB97EE866D56C089702AD1CA87B6400
93AD9C9CD02152C64040F8212614CD4727D056A1
43DF7B055F78ECC001599232613A3BEFBD3E076A
764D2FA59ED123F9C95570C403C92FEF338EA745
BBB8ADE70CE679C668463BC8CE7BD8399DD163BB
4E56E53A34D5951858B03569195C72949BCDA188
C55FCBC62CA7163744F2F845533A8FCD3077A30A
2E13487234F237A80671FD0DC0E60AE828C60555
BF198756BBBD4606086B1E6177F23FB56DF55B07
4BBEA4C2D56F1B5ED1A3755AA1DAA40A0B79CDB8
AF648AE953FBE423D72E227BC78ACADD5B226F6F
94FA31B79E38B20A90BE841DF5DE8BC5541AABF4
CE0C0BF4B97ACB5478EC582B25E7AA66DBA7E0FE
E3308C06B3776D8A893A5C8F8188DBD23F36C7CA
70608B40D0B776174A4ED85416582770B307B905
9D54E9A0DE59804F1A4101E877A2080EC2BB887D
7BAEFF8C68E6CC77EFF989728C8B5243DAF3F8B5
75268ED02F9BB20692AE1EA8D7A78BC01911585C
157FAA4B575C25FFB2D6B641D2E43067A90F7FF9
4010DB8FC48007B966FBBBAF89314D3B3A2D8DA4
7611CD06FCD459D58650A9055D4ADFC42D5944CB
0AF61AA1400809D1F612B53CE61961098B787767
8C9CC61AE33BD12859BF0AA883F86A360A6A2163
BCD8E131ABD98CC8C01F781E55B61F50B5FBB641
A051749F3E9D2804D771B2F1E0C8027544C996BB
E33D27CC1D41155AB9CF0450D27C5F17F8AC2F2E
ABFFB26DD6E0D1E4CA5E532C854B6A76E163F2EC
7BD7DEFCF34883C7B3B1B9A394F2AE94F14D8A85
F11276379476B0DC3A0651328E5F48B1E0DB13C3
82D9B3283887A78EDF087E0CF6DA6CBA1A6745B0
CE912E2EE8E147506D183694037929FCF1C0728E
24AA0DBCE6D92B5F9DCFC670C6EE7CA811A2BF4E
144B932B8016251B88C5D9B3BD0E51620144EE27
A4E3AAE02523B3E83EFBA9F5A194457A15EC094C
9AAA02BEAE6338F591BD15838E33C0B4447B4FA3
CE1710A80BD0DFB6ED688C37C8FC066268BD814B
BE128A987CC4C6A0CB3A4EA6A36DC60CC83F7FED
47312B8A43540189960F542AA42DD6B6B587D3DB
AA1E28DC508424DA2567D094A53E9C39AF7E1BD8
0A532CDBF8E0DE98C3AADD075329DFA472846A0B
40302FCEB1CA7795B9871ECAA1B7D334E0F9E41F
62073FF225C856318C84F2B1395E5871D44B4962
5B6AC0DA611E084329B87A46AB8121F602787359
44A22F552225F5EE5D7F832898334EB1200207A4
BB7F0FD5083112D9BCB6E2A35C5B8B204A52E7D6
EF6C68DDE05896655EF293CF05331F86FB17D8E6
EAF49077834D82235DD38E2F521AD63F7E569C73
121F08BFA981D3746ECB550657F6A0322A7AA172
ABECABA430770DFA73854DE8555B60E972BBB212
17BD9506AAAE7801CB27374EEEA6F7E64F20B9A8
7EC546F3BA8FD8D16F24A5A17BE93AC518E63A24
B6E227F098FC08C6164AC29CFA996012DDAFEEA2
C62DC9AE90E99B96A988F7044C91A9D0B3BF35B5
7252A1C518EF94AA0EC89D199378528C1C60CCB3
586D607480E6401CD6F778C40C82F624625F4947
49CC17D56AC2F952ECAC9FEBD8417FF195B88341
F9431E2E44E106A5BF1B767827165353934E8C4A
ECADDBD0D0D412D8815E1B9171ED7E4A183E3D1D
5554671BCE761E8E4CDD17DDF20CD51D077E0790
9EEF746217D6BF71020CA3D1FD268B234717469E
8C75E5781F0125C89DAEAB588EE27EA8692E0E69
663F329AD73DFE46EE30B1AD306E1C65CE23D343
7B6C5576739CEB8142DC81F1AF8C7EE2CC10121B
FA4FB2484E83FC109D168EFE3BE0E21E270C7EDB
A044CAB17C1491BD7E924CF6A9BBBFE25B4BE8F3
10C77D3F130400614CA9C4AE068D0C06063DF581
FC32477DA140D4E2D849A9E00824374A48662947
72276FA92754590CB824E8FAD4715975FA316B33
247106A405B288A46E70A0262717162D0903E734
534CD27BF6CACC7C72F9E0F40F06D748F2ED67BD
AD5F20A413B8315F1C5F0C9AED79C98315763306
9A933E0E07659752DAAD19B01C72CA89E4D2F9DA
E93B5FC1892B69316184F1DD1EA0C5F7716F8596
816A8A8C3DEDB3E85C4061B5A3856139109DFE0A
67BE49EDD179FC49177DB05C1FE847DE50868A36
0FA8188F72A156AD14530F76BFF0C73571D53155
8A63C019620165B85120C8DEB3362D0795020486
C2826E266D7405D34EF89762636AE4B36E86CB5E
E4D3066BD561F9CF92D125438BCDF21A50C3B15F
42D9EB484D6DEDF51525CA794466E97D7BA8E927
188B39CEEECB6E612E01B1F70BFD30035F703E28
263C1BA861350F3767F9A0652774BC6D03FEBCAF
01ED4F29ECCEF3110717C21D3E4498F409472C39
A3E0FB7EB38ADE229D5D7C33BD74DD0C62BED9B1
9219BF9ECE3D999A5D1F61BB4C9137DCBC92B3C8
4B9B82B565542082E0771F004DC0DE1E36DF9D8B
4CDB3CA20337E1FFCB6F1774C3F7D01FB4C79C76
D5C499A025552656830D43DC9898FC98B7A4877F
9BFC392E149E2DAE1EE95D4935460FB7577DA820
D6E0A87E68B8507CE86B7A1CB55E3439E83658B0
3D47641F2FBFCCA012DCC5D7ECF417D67AB5ADE4
E10EF1C63E2917432901069CF23B7A477DFCA8CD
D801A6C35B3A99777418009D582A93945EB5CEDA
AAD5B08F9A361C6195F93DE2D05380C5305CF28E
3669B628023E6B2E7053DBC6102E81DE716FCC41
7C04B5FDF11A158E8D895324B71FAB475A503CE2
A78740A1A3BB273EF8609F2348B59C7E3488F9A0
BE71950968995D30B579D8EDF7C2F732C76A33C7
BC09B1122F3C3061F0E9166A3BB22C6436977CF3
C3751F51A2A1F3B5BB8C37B024D82AE83CFA9C8D
63B8502CE5D1D432E9C75F2C737E97CD546B7A9B
63FA9E2C0E96B578FD4C904DEBE0C583294FEF57
62662A376B47FDED50A9CB3D316691B7C3903C3A
86E669C397F181F8B816A62450A73415E7F6B2CC
BFCFAF4662C3493D4CFB05759A0F34D4868A08CF
6C76A1BABA43BCCAEE1E34A9FA46665FDA43BD5A
45B82B775FD5FC5CE9904910676F64CC9EA211C1
423C4D044F069B6435BFFC896F368FD335D0EF36
F5F4B59FF6EB1516F32F47B85F42DAAD82A8AA6F
A00729B991C801A4E970929220300CBA45F0A440
67FC406B755AC198F0DFE4313157AE011222511B
8360BEACD4B4334CAB4208D3355F459F099486F0
070A726C6E4418DCF0213874F0C16D93B041E935
FD05E73DC9C71E02E4461D8E5C71DF7C6BC54C4C
7A6ACC1DA884DD30248488FA69557D3C5D5651EC
97E5CB413CE705A0DB1882F2CBC822D26710F67B
46C7401992CF5E2518F8CC8BF505FFE9F65EBC48
4645F5AB98C6E3EFD59BEE793F371086DDD7C260
F4F26A16D4B913CF3208E664E3DD384E56CE77AF
F5FB01DEA6E59CA6DD057054F4A3FF72DDE1D5C6
75107F3EF32EC5F1D2FC9EBE4F158237AE459B7C
02B2908CC07933817116063A72830012A2E72B22
97FE2A4C776C584565BC38BCB8B95F16CA64A8EE
38DAFCB661E4691200C916BE33859593F28759B2
1A38C37342190E96F33967BA9CA0F13B6BFBC70F
0D0E690EFF634B60AECE5663B6352D0D12589B06
0BDCDE67613F3D5F5BCD5A5E368118484A10022D
FD9725D22843091F8D61D5BD4242DF62DD7F3AE9
AFD335D34EB9C673D867EA441C99F3504A644063
10EE7ED28E5C63FDE1C4CB0F1D7CEC78CBD20D8E
65D97276BD73DFDD098DEB599C9B2A1996DB660D
9924E5214957AC3AC5E3BFE1E20F714CA1963C06
41E312CE9E4D27ABC7C90266B115DC70D4849C19
53969D17008385390859143FF6B5DCA2828079F2
236037C6984A62F3B40068113AF4D4F8BFFB3BAC
873D2BF7E405A66940627BE8BE3D53188C8A904B
6144A1072913A8E7572DC4BEA0E0056CCE2C10D1
E98548AD614069B6AAD3E25E8687546DA16B32CE
602C3FBD1A20D30BF764130B50D28876386F8E66
82AAEE91D12CAD6D30676C5210B00BF2236DCD21
2AD280D97B0719D024FC1FAB5C4A6E6A86F723CB
2ABD9AA74AFD75B5E68579BBC4E289FC95C16B07
1B55AD81148C4324CF428F6A6B84E7D22D60AAB2
D2D3DCBE5654B1DEB3C93FE6452BDC71BE93B9E2
827088A0C3127E89C6F72F373C5B3EF7E8A4125B
17661DFBA03E6AAA09142E012D216864F01D1F5E
9151B539751B891401C745A9DE301CBDBADF3FB6
377516ABDA1E249F3DAD9DCF120A6D2C2A5C89B7
90854CE574D03218DF2E7B4A054AA53F6951C1D2
ACABAFAB17A0B14180114EC0A22D712F994CD9C8
440FF68A35E03995AC55E457A67EB1680F9A7CDD
9332F54E27F32B32BF06D70F35CB4FDF6505597D
872FA06D68DB94F178D4F866C5441844D17C38D5
0488A2BAC10E233C8924338A8D55666E8058A161
1AC310BEF1FCF36E941B55ACD29DDCD2D00EE8ED
8A51339879AA673DC0246BDE374F099AFA6DB2E8
D46CFE2B2F6CBBE62B728A03ACA0239A633DD298
023E8E7D5F1FFB147F6C6AC233E4E2100B4C6900
BC43110E112A64798FDFCD8E1526E5ED57766FF4
A8667EDD559F9F7DA9F5BC1008D4467BF9B889A4
C16FF035657C7C638B02AE1753D7E3136A5F0624
D7F41F5F862E5F467B615152C107E53B43347A1D
3664D5D58C1A115DFC25B4D86DE65EE65269250B
9A6207A5FEE6225A300CA316DE4BFEF56BC9FC81
48C54232DA918B0B82357FED943F8194D6F0405E
B8DB2EC6797B19B9164393DA568ACF45DE07EB0F
3D5829DA0C230A03F1779EAA2FB344BC47A787D1
74D12DC2F6C67965BBC08A4C30FF005F044581E2
658B1B3F412A20F9394E77E93E91619E378AEB6C
B29C148AC5D146CA9CDB0905823AC9B7766F0039
878EE652D70FC6B7C819B3E00FAF4C5AC2DFC53A
4A9698A2E5B174E6FE81B2DFAC1BE9B5C7ECA4C6
4BEFF1E4579063AE72DA6CFA3C346FA122DBC469
F42BF6BE4C944BD0DA928421FE5E325162C08496
13C3862AF3C8A32FF40E1DB5488B368B8322FC7F
5317F0485013EE980537285EBF1347804EADE6C7
AD80F4F62DC55FBC61A63846D6570023567EA757
FBB92E68A6F877C4DD2FD8E74FA00F21F2995EE5
5B4994EBE1BB1371343525B6D4E8207FAEE9AB83
CD357605614F6BF555315B75DCE0E3F73BDAB3A5
B1819F88F65967EAEDFF615708C54F2BF832DEEC
533DA90FCA1A2AAA5BB1939E222DA9D9FE9A5195
0DC412DBC9BF0B4FCAC77A3B73AA07AA4FDEBD45
D8A76A01F14B626BCB388F53909BAF6B7298C0B4
5629E2AE7B02FCA1D84162913075679C8F2FD4FD
E84990CB9BF8E3AB0BCAE8A649CB30FE4DC4D767
F66529DF6177DF6A74911157B48A2668AB5F9962
56675261CC68026A1AB4F3EAE444FDE4C3A092C9
7A164F53AF93B80965FF9FDF446D5849B14B3FDA
C8AF0B661078FA075B5B4E80FF37E0597BC8CE93
9BE40CFC227CB8C81CBA3E3269C09C2F753E0F0D
31DF7C2685F9DB846C8BC8FC49B6C9E997BA8062
3BBB61A07435CD781BEDC637CDC9413FC4A6C674
E6332590A2D49E62E88B8632C74459307E6DA7EE
298DD33E8FC3EEEB5E9DC63D9E7E7B4B62F84383
07E6EF24E163E2F6166BFB10582288C9BC5370B5
329B78A5C9EBC2043242DE90CE1B7C6B1BA6C692
9FC32441F3E04946432D86E81A99F96718B9738D
D534700973D8D44EF041E47891D9A16482C657A4
4CE9E54D353BD97238CF551F10A35AEDDDBE6504
237014489151D07CE77A21061083D00FC5CF93F7
A9215DBCB4186C547DCA291B888FF30D966573C5
94C95DA1E850BD85209A4A2AF3E1FB1604F9BB66
D772DA0874059418FCDAACE3F4FF2AC964A852FF
BA1C718242F1B46611C8425BFF6F7AA04F381FCA
33E4E80807204C2B6182A3A14B591ACD25B5F0DB
64D253D88595176B07079E89775176834214B86F
A3DF966D0CB2D84AF8F16C855B97C49364F5D8C0
40CEF3046C916ED7AE557F60E76842828B51DE53
956A6D75483E2BBF7B68B6A3E7213A0EF4181157
02D65B95E28370C1570095FA88F923DD937FAD8F
4705E9B8F1C9E1ADDCD937976297B082765BA3DC
AA950AAD16265917F7DADA5D662F778FB00F82D9
1F7790399A1DABF825E594D113A16207D025BF15
94F162B98A4EE6EFD189829C8E446B02E3040F58
E5C8EA53E49D5A977DAD56AD14BB0D2A61A66491
4CC0BF9C4B987E22F38A6036B143272BCC136063
19DD644AE504F8A1FE5828AF1ED9AD4981DB6209
B527840A212DD4F9B31E20C8ADB1E6BBF65E5D42
A37A21E728AB28240FC9FE3B7C8EEFC0526BA702
239A6B191FAE13FBCF57DBEB753DD6C3E3D728F3
59A08D6E9521370D87CB940AC851075957429097
799BCA97824C88027A7EE452A852F8605E14EFF1
E41F899E73D75DB8215A8636BD8D71065357A547
60A801B346164B6153D75D33ABB3623A0D7CC4A1
63A5C713AF0234AAAD44C486D72ED28530DB49F0
C10C45EF19C80B4C1E766C85EBFBE08F0C1621DC
6B8D76DA69A25160E5D6710C350153BF260FBF9E
50CF0E88EA5C729582753A5AAED2CC7CD1F7DA3A
B773C7022AC5462FA35F4A174B11039738A926C3
C69BF80251259982D5A5AD376A11F88F315ED4A7
98CBBD74D3F49DFFB7D0F4D7A2AEB6F408B16070
A9D6C26549CD6AFF623268033FEBA9972DD7D52E
621C64AF3FCF629AD39F66E90FCAD52575C72D92
FEDC60489C682D1EA555DBBFDC1407193EF9668F
225DCB787E5ED5C999FFA6E21D1D7951151A4659
8A8B7ADD83356C4CE6752837F626B5059F5B54C4
0B2280EF840ADF325520B70D8785512F5148A21F
F64B6A9972A8431D67334E9AD7B0EF61DC05568E
39F1296A956B7BF8890736E528E079043A6DEC51
E63B70066CAD59472F71A28BD855BBC6FC5953A1
16943A59FB412FB8B162616E2A38B1F799FA2FED
B6A4F662D11FE5FD41551C3A990EF9D19008AD9F
04A79EE453BE3270ABB82AB8D76F375F071A4BBE
B6A3745B580EAA12156797FC7024D41ACCE6913F
E400A8BF048C58EA28EDBC68CCC687C86FB8E94F
034CA46B8B3D30493751A2FD7C5C1F25C590657F
0965F952D2D60172CD843C3DA0587EB01F5608BC
1893205276C4448E00ECBD613E5FC75CB672ACC9
4D9982C9433EAB28F8B13083A8BE539683B99859
046AA16D28967A45B2E510985DB4E97755CB47D1
7CF0F32C72044A017E7C8713689475579237A5BD
8A3455B4DEA65DC4B252D2945240CC070CC7D4E4
1CCDA0E13FAEEBFA311DBC1048FB28540394AAD7
F222201E88F57605166FD013BD6AE0B55B9080C6
6F1DD38152858D067BAB9A76C1519C167619BA77
38525C7140D285040E02DD2A7F3C7DBA21042E01
328925461F4AC00F4F56C04F8C910747736412F4
E859530DA7D703D60C8F7266F6C185064F6A1163
D782515E87BE217CCBA9756F7119D7178908404D
10F0F1E452B8D07183D02AC3DF97D0911E98473F
30689DC2681EBCE0E5BB56C0D3E911977850C5A3
3E8C75C5FD74FF3C3982EBB40CC55061536CDBF8
06035EFCB0B44637E58792AA9542B03B3EFC5E9E
DCB5B1F4AD57503D8848A03B04B8A24CCB88AEBD
FF2EBF2ECE71D2701B31F21FB7DF7724B9FCCB0F
B6BF99083A40E79BB0759FA01EBC6A1EA4BD133C
30EDCDA37AAA6783E150F06BB9210A7AABCBE5F0
F25444F0ED9FA9FC4100EFF73396B8DC1328CAE8
8A8C3F4422580DC6D310BEFC77B78700F221B9C2
86C797712FADFDC412856727C1D4E014162FF37A
6A358A037C23F9D3953522479ADFB673821DFE0E
F34DDECF3EA10BD2E2F6308ED1CE537B093578B3
AC97D4A7CC76EB8B73EF6F231B3EEE144DF128A3
E1400C1EB5DBF7AAD5E8AD740F749A6ED479A8C1
1EB0B157FD04A2D3A53C014F27C117C3A4DCD8F3
E2CC0C66BF6B8BDED6C627B512AA25F778BCBF06
F720E347B8264EDE664EA67F9FDB7903BC80AA72
7714106DD46511A6F1E4E1CF4B66378E5849446B
525C47FB3A5E0655FBD4BE963CA1E94D5FECB43D
9B8B0AF7E12F6C4FC6C2F82DBFD55BBA4700E8FC
F6715A5E1669B18194CD53355E632C26EAFF6D39
4874CCFC108EF73667C5A11B0BAB84746017F2E6
112325A40E1807575D205350C75D5FE4213438C5
246EFBB8B71927A0D2F2B726508E8F3A3D42EA51
A729C1982468C774021614EE8ECA0B7B781B51C7
78274C6D3B56C2C28F8A9240F7543A3C1A27A136
42B2BECED24A95A5D537F796CF50168C5413F8B5
529455C83DB706559EA0A8059734E2C2C5AFA874
E21E9FB57BA6DF8F7484ABCDCFAD9ACE88917FF4
D3E28308711C7E539EBEB56D2EEDE88F7223BA79
BF357F4EC7A882B1CFE95BBAC1F2545E3CB1BFFA
D01F069332C8BC4D6B7C4AEB976E7FD5A30285C9
B9426DD6B85B3DF7F1581664672E5D14C40A3C67
D0B4C941A0C14727391705A22D198AA85637C0C0
8FDA235CFD5128B35540A2544323976979BF895D
6E711E4FBF0ED0BC918B59CB5D5F3ED24B2F4F4A
CD2DC5275D6A395C67E060FFC8B427C002A737B6
3FF48021FA0B01C16241CD6A9BC5923D44A38B70
D18ED865749FA0628112E71C73F011CEB04427C4
FAF76441F498E5DEC5C9338D9777A99247537D51
CD989334843A511A09B96BF3F2697F62C9902F07
6553216A9AF7AB34C4ECD94BC0EFFB4BC532980D
B04D70B04B4CAE0B5F86123E4CC2E3649B3DA5F1
B999BA2A89DE4002ECF0C80F2B5745D99D2574D9
3E2A08AFB111416CCD72BD3219C77A0BCE14178F
5B6B71AA17E1CA58CF7723004C71AB2FE5B32123
C1040087E622BB8E4C68036B705FF30028E2C3E6
ECA4EEDBED3A106C10652A574867E383AB8B5F19
0B4D7553A447AFC83F0ED8225A29AE9759D1C266
47961937B34CE2D12BBD2E8AB5CC96C4C493746F
4A37354A2ABC24171D5AC0D77153E44C1A5875B5
1E3451A465717D2F9A5F86359289C347D10D9F7A
BCC4B7595B73CF0757E7D320549433FE8BA9D142
88BC8673305BB0C0A0EB652751D432F285B939A3
4139CE95C5374A14A04A1C15FAEEB0177088FD2C
CA7788C32DA1E4B7863A4FB57D00B55DDACBC7F9
0FB07E231155FF10449B8AA1C7CB22B354C2E666
8D594750CAF5182039A1B516EDA712F3DCAE6339
5D6A96FF68706273E913557462889487D08F89FB
4B4C0E215FCF5B3B8668F48A2EA8A9D2AB0EA5DF
FA3B3B3C48A28F0A689C56D633554420F70899E3
5169A985192D17D5682C1D3126BBFEB1FFD434B6
1F2DBC87A8F4DDBD40D9669DEC65A9053427469A
D89E3BD43D5D909B47A18977AA9D5CE36CEE184C
BBABF44B42207395684605B5602C9D56A5508BE1
1874EAFEE7E813B46CF9433C16FEEC7FD2BCF5D9
41EEAD7050191684912D2CF03AD63596EF2E4976
30CA5A9B918ACA4F8970973CB9375AFC09079E2D
AF6686749E649FB78A378CF531933353A84D38DE
E59C6DDA590A3CEB0011552460D02E98F41F27BC
8A01E30004366B97983F9CB9031DE54645CBB6A5
E6A67AFD553B5BCBE901AAB10FA94CA82566BC27
497FAC9F8FBC810956B8FA9038B8BE150485A13C
71F8E304C692E7FCF92A17F7B0A58158656A8E94
8C2B91EFABDAC3A416066EFE2A5871AAEFF8B522
65EF1579BFC4C985EA0B2320CBF2112D6697EA3B
0B6D74B3473E21F1FD25B3F6CAFE08E65DDA9973
994BE9C30DC76DD942CE6E8C7451FD524B92DF0B
831A7F9360F7919A763E35C54A1752965BB1CAED
7C6749FDD405FBADC212D4C7B8C392129023EE26
DD46BCF1C81ED6D3D7894433608CAE682B7E20CC
E1303E8487837AAAE34BB55970F453EEB5270405
E036F01AD90C1F30FFC3C11CA337AFF9AEAD6BE7
7A5DFB3682476707C3FF0D9DEF4505DE54F1711E
B15679FD0AC8671DD99ABC2D6CACD9128EDEBAE7
D4E638A4BE992EB0411FA7595E293092EEC72224
7CF0A2CFADA67D1C09D531337D47B5F94D0E3CFA
447DC985D1B7D41A565A717AC9B0C85C8BE5A6E0
D9C8CABA980A4D6B90216097775092E0A6EFEE73
BC8A5EBDE6AE1467B56125FD112B09C14C278EAF
1A354290CFDC6883242183BF3FE7CCA3140AEADA
4334C8323E735ADFCB028B17F72913680C43DD15
A042A852961B90D5867591D0EA2B996CB9ECFEF1
BC0A6EE6C66080FD39EB82DC3325816B620DD15F
0F888036AC14BE902F9A5558A8851DCD21CE934A
D6970548458554A6F70AF2FC542024147ED504CE
7F95276D4951499FD756DF344AA24FB38CEAF678
627AD24E2334E200BE6686D73C2CEE2233E460BA
FB78E8CBEB088FE7CA8EFD72ABB73DA4EDFDBD59
C81A8BD1F9CF6D84C525F378CA1D3F8C30770E34
4C7EF252A701E802E3607881901CB30A6D2BA75E
FF993FA3F9C3DB1BC5579094386085481EBBDF45
46331F63BFA0F3BA30DBFE833F4829A8D1DC9B3A
8A7C8E8A1D8B1DE53E844D0E7C1B798740A811DE
606E301E28ED2ABD56D1746E7851A12FF60BE2FD
E54A8FDB49048DD987C27C6AFE6177569C08D770
0D91909AF3F28DAD8B0342EDACE84EB18F0A7FE9
4F9D205F580FC32FCD82A65A39C3799429EE69FE
EC102C8C7E69FAA38A4467159804EC3F50996104
91C6D6EE3E8AC86384E548C299295C756C817B81
AADBBC22238FC401A127BB38DDF41DDB089EF012
F18B538D1BE903B6A6F056435B171589CAF36BF2
FA7CFBB247427763431B7E6D75812A49CC8D30E4
20CEB1F0F51C0E19A9F38DB1AA8E038CAA7AC701
'@ -split("`r`n")
$report = @()
foreach ($line in $list){
$certificate = get-remotesslcertificate $line.endpoint $line.port
$chain = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Chain
$chain.Build($certificate) | Out-Null
$daysleft = New-TimeSpan -Start (Get-Date) -End $certificate.NotAfter
$chainarray = @()
for ([int]$i = 1;$i -le $chain.ChainElements.Count;$i++){
#get cert type
if ($i -eq 1){$certtype = 'Personal'}
elseif ($i -gt 1 -and $i -lt $chain.ChainElements.Count){$certtype = 'Intermediate'}
elseif ($i = $chain.ChainElements.Count){$certtype = 'Root'}
#find thumbprints in blocklist
if ($blockedcas -contains $chain.ChainElements[$i-1].Certificate.Thumbprint){$blocked = '!!Blocked by this CA!!'}
else {$blocked = 'Not Blocked by this CA'}
$chainarray += $chain.ChainElements[$i-1].Certificate | Select-Object @{label = 'BlockStatus'; expression = {if ($certtype -eq 'Personal'){'Not Applicable'} else {$blocked}}},
@{label = 'CertType';expression = {$certtype}},
Subject
}
$chainout = $chainarray | ForEach-Object {$_ | Select-Object @{label = 'out'; expression = {"$($_.BlockStatus);$($_.CertType);$($_.Subject)"}}} | select -ExpandProperty out
$report += $certificate | Select-Object @{label = "Endpoint"; expression = {"$($line.endpoint):$($line.port)"}},
Subject,
Issuer,
NotBefore,
NotAfter,
@{label = "DaysLeft";expression={$daysleft.Days}},
@{label = "DNSNames";expression={$_.DnsNameList -join($delimiter)}},
@{label = 'CertChain'; expression = {$chainout -join($delimiter)}}
}
#Получаем полный отчет
#full report
Write-Host "Full report" -ForegroundColor Green
Write-Output $report
#Отчет по сертификатам с валидностью меньше $triggerdays дней и #блокировкам
#reports with expired/blocked certificates
Write-Host "Warning" -ForegroundColor Yellow
$report | Where-Object {$_.DaysLeft -lt $triggerdays -or $_.CertChain -match "!!Blocked by this CA!!"}
Если в списке оставить только pop.rambler.ru с портом 995, то вывод будет следующим:
Скачать скрипт
Автоматизируем проверку
Вы можете прогонять эти скрипты вручную или настроить их автоматическое выполнение с последующей отправкой e-mail’а, экспортом в Excel-файл любым другим результатом.
Для формирования отчета в Excel вам потребуется:
-
Установить модуль ImportExcel:
import-module importexcel
-
Добавить экспорт в Excel, при необходимости указав массив параметров, которые нужны в отчете:
$report | Where-Object {$_.DaysLeft -lt $triggerdays -or $_.CertChain -match "!!Blocked by this CA!!"} | Select-Object endpoint, issuer, daysleft, dnsnames |Export-Excel c:report.xls -AutoSize -AutoFilter
У модуля ImportExcel достаточно много дополнительных возможностей — например, можно настроить «подсветку» нужных вам строк (к примеру, выделение красным цветом строк в столбце DaysLeft, если проверяемому сертификату осталось недолго) или другие фичи.
Ну и минутка позитива напоследок.
Во-первых, пока еще не все корневые центры сертификации присоединились к санкциям, а значит, они пока продолжат выпускать SSL-сертификаты для российских доменов. Например, нас пока не забанил CA Globalsign, также есть Intermediate CA, которые могут выпустить сертификат — нужно только их поискать. Так что, не все так плохо.
Во-вторых, в России наконец-то открыли первый собственный Национальный удостоверяющий центр — сервис выдачи уже заработал на «Госуслугах». Однако, чтобы сертификатам, который он выдал, было доверие, этот корневой сертификат нужно установить на каждую машину пользователя. Если в организации используется домен на базе Active Directory, распространить этот сертификат групповыми политиками не составит труда.
I have found that my home PC (Windows 10) currently has 39 root certificates installed.
While scrolling though the list I have noticed:
- Names that look familiar (e.g. Thawte / VeriSign)
- Names that are unfamiliar to me (e.g. Startcom / Entrust)
- Expiry dates in the future (e.g. 2020-12-31 / 2030-01-01)
- Expiry dates in the past (e.g. 1999-12-31 / 2004-01-08)
All of this a a bit concerning and I would like to do more to control the situation. To start with I would like to confirm their legitimacy.
How can I verify that a root certificate is authentic?
asked Nov 11, 2015 at 14:37
2
This is often normal due to how operating systems publish root certificates. You’re likely seeing the overlap between one CA’s root certificate as it expires and is «covered» by a new certificate by the same CA. Nonetheless, good for you for not trusting blindly.
Most public Certificate Authorities publish fingerprint information about their root certificates. You can hunt these down from CA to CA and verify the certificate you see in your root trust store matches the fingerprints they publish. For example, Thawte publishes to https://www.thawte.com/roots/.
Each CA will have a different policy how they publish this information, but it should be easy to locate and verify with your own eyes.
answered Nov 11, 2015 at 15:33
1
How can I verify that a root certificate is authentic?
Authenticity can be kind of checked if you search for the fingerprint online and find the certificate where you would expect it. But this is not foolproof because this might be a fake site which is just looking good and has a trustable host name. In any case you don’t know the party personally and authenticity does not mean that the party can be trusted.
At the end you have to trust the vendor of your OS or browser that it is doing the right thing, because effectively you have no way to really verify it. But this kind of trust is not uncommon, i.e. you trust your supermarket that the food is edible and not expired or even poisoned, you trust your gas station that the gasoline is not dangerous for your car … — i.e. you already trust others in security issues. And you hope that if this trust is no longer justified you will somehow be notified.
Trust can go wrong as can be seen in the Superfish affair where one trusted the vendor (Lenovo) to ship a trustable computer. But this computer contained a software to injects ads and additionally the software installed its own root certificate to man-in-the-middle connections in order to inject ads into https traffic too. This certificate was definitely authentic, but most people would not consider it trustable.
answered Nov 11, 2015 at 15:34
Steffen UllrichSteffen Ullrich
189k29 gold badges374 silver badges431 bronze badges
4
I have found that my home PC (Windows 10) currently has 39 root certificates installed.
While scrolling though the list I have noticed:
- Names that look familiar (e.g. Thawte / VeriSign)
- Names that are unfamiliar to me (e.g. Startcom / Entrust)
- Expiry dates in the future (e.g. 2020-12-31 / 2030-01-01)
- Expiry dates in the past (e.g. 1999-12-31 / 2004-01-08)
All of this a a bit concerning and I would like to do more to control the situation. To start with I would like to confirm their legitimacy.
How can I verify that a root certificate is authentic?
asked Nov 11, 2015 at 14:37
2
This is often normal due to how operating systems publish root certificates. You’re likely seeing the overlap between one CA’s root certificate as it expires and is «covered» by a new certificate by the same CA. Nonetheless, good for you for not trusting blindly.
Most public Certificate Authorities publish fingerprint information about their root certificates. You can hunt these down from CA to CA and verify the certificate you see in your root trust store matches the fingerprints they publish. For example, Thawte publishes to https://www.thawte.com/roots/.
Each CA will have a different policy how they publish this information, but it should be easy to locate and verify with your own eyes.
answered Nov 11, 2015 at 15:33
1
How can I verify that a root certificate is authentic?
Authenticity can be kind of checked if you search for the fingerprint online and find the certificate where you would expect it. But this is not foolproof because this might be a fake site which is just looking good and has a trustable host name. In any case you don’t know the party personally and authenticity does not mean that the party can be trusted.
At the end you have to trust the vendor of your OS or browser that it is doing the right thing, because effectively you have no way to really verify it. But this kind of trust is not uncommon, i.e. you trust your supermarket that the food is edible and not expired or even poisoned, you trust your gas station that the gasoline is not dangerous for your car … — i.e. you already trust others in security issues. And you hope that if this trust is no longer justified you will somehow be notified.
Trust can go wrong as can be seen in the Superfish affair where one trusted the vendor (Lenovo) to ship a trustable computer. But this computer contained a software to injects ads and additionally the software installed its own root certificate to man-in-the-middle connections in order to inject ads into https traffic too. This certificate was definitely authentic, but most people would not consider it trustable.
answered Nov 11, 2015 at 15:34
Steffen UllrichSteffen Ullrich
189k29 gold badges374 silver badges431 bronze badges
4
Listen to this article
В операционные системы семейства Windows встроена система автоматического обновления корневых сертификатов с сайта Microsoft. Компания MSFT в рамках программы корневых сертификатов Microsoft Trusted Root Certificate Program, ведет и публикует в своем онлайн хранилище список сертификатов для клиентов и устройств Windows. Если проверяемый сертификат в своей цепочке сертификации относится к корневому CA, который участвует в этой программе, система автоматически скачает с узла Windows Update и добавит такой корневой сертификат в доверенные.
Много текста
ОС Windows запрашивает обновление корневых сертификатов (certificate trust lists — CTL) один раз в неделю. Если в Windows отсутствует прямой доступ к каталогу Windows Update, то система не сможет обновить корневые сертификаты, соответственно у пользователя могут быть проблемы с открытием сайтов (SSL сертификаты которых подписаны CA, к которому нет доверия).
Примечание. В том случае, если пользователи получают доступ в интернет через прокси сервер, для того, что работало автоматическое обновление корневых сертификатов на компьютера пользователей, Microsoft рекомендует открыть прямой доступ (bypass) к узлам Microsoft. Но это не всегда возможно.
Что такое корневой сертификат?
Корневой сертификат (СА) — часть ключа, которым центры сертификации подписывают выпущенные SSL-сертификаты. Выдавая корневой сертификат, каждый такой центр гарантирует, что пользователи или организации, запросившие SSL, верифицированы и действия с доменом или приложением легальны.
Что будет если не обновлять корневые сертификаты?
Если не обновлять корневые сертификаты, то:
- вы не сможете заходить на сайты, которые используют доверенные центры сертификации, которых у вас нет в системе, или срок которых у вас истёк.
- при включенной проверке издателя, вы не сможете устанавливать новые программы, которые используют доверенные центры сертификации, которых у вас нет в системе, или срок которых у вас истёк.
- вы не сможете продолжать полноценно использовать приложения, которые используют доверенные центры сертификации, которых у вас нет в системе, или срок которых у вас истёк.
Обязательно ли обновлять сертификаты?
Нет. В случае если у вас Windows 7, Windows 8, Windows 8.1, Windows 10, и у вас включено автоматическое обновление Windows (Службы криптографии и BITS), то сертификаты обновляются автоматически.
Обновление сертификатов (для всех версий Windows)
На примере сертификатов КриптоПро CSP
Шаг 1. Удаление старых сертификатов из контейнера
В проводнике наберите в адресной строке адрес: «mmc.exe» (без кавычек) и нажмите Enter.
Откроется окно консоли управления Microsoft.
В основном меню консоли, выберите «Файл» — «Добавить или удалить оснастку». Будет открыто окно «Добавление и удаление оснасток».
В левом списке выберите пункт «Сертификаты» и нажмите на кнопку «Добавить». Будет открыто окно «Оснастка диспетчера сертификатов».
Нажмите на кнопку «Готово». Окно «Оснастка диспетчера сертификатов» будет закрыто, Вы вернетесь в окно консоли управления Microsoft.
В левом списке раскройте дерево «Сертификаты — текущий пользователь». Раскройте пункт «Доверенные корневые центры сертификации». Выберите пункт «Сертификаты». В центральной части будут отображены сертификаты выбранного раздела.
В списке сертификатов (центральная часть) найдите сертификаты, выданные УЦ КРИПТО-ПРО (6 сертификатов). Выделите найденные сертификаты и нажмите правую кнопку мыши. В контекстном меню выберите пункт «Удалить».
Будет открыто окно предупреждения. Сертификаты КРИПТО-ПРО не являются ключевыми и могут быть удалены без последствий. Нажмите «Да».
Перед удалением каждого из сертификатов контейнера будет выводиться окно подтверждения на удаление. Во всех окнах следует нажать кнопку «Да»
Шаг 2. Удаление старого сертификата безопасности для веб-узла
В левом списке раскройте дерево «Сертификаты — текущий пользователь». Раскройте пункт «Другие пользователи». Выберите пункт «Сертификаты».
Нажмите правой кнопкой мыши на сертификате. В контекстном меню выберите пункт «Удалить».
Появится окно предупреждения. Нажмите «Да». Сертификат будет удален.
Обновление корневых сертификатов в Windows 10 / Windows Server 2016
Вы также можете получить список доверенных корневых сертификатов со сроками действия с помощью PowerShell:
Get-Childitem cert:LocalMachineroot |format-list
Можно вывести список истекших сертификатов, или которые истекут в ближайшие 30 дней:
Get-ChildItem cert:LocalMachineroot | Where {$_.NotAfter -lt (Get-Date).AddDays(30)}
В консоли mmc вы можете просмотреть информацию о любом сертификате или удалить его из доверенных. В целях безопасности рекомендуем периодически проверять хранилище доверенных сертификатов на наличие поддельных сертификатов с помощью утилиты Sigcheck.
Обновление корневых сертификатов в Windows с помощью GPO в изолированных средах
Если у вас возникла задача регулярного обновления корневых сертификатов в изолированном от Интернета домене Active Directory, есть несколько более сложная схема обновления локальных хранилищ сертификатов на компьютерах домена с помощью групповых политик. В изолированных сетях Windows вы можете настроить обновление корневых сертификатов на компьютерах пользователей несколькими способами.
Этот способ предполагает, что вы регулярно вручную скачиваете и копируете в вашу изолированную сеть файл с корневыми сертификатами, полученный так:
certutil.exe –generateSSTFromWU roots.sst
Затем сертификаты из данного файла можно установить через SCCM или PowerShell логон скрипт в GPO:
$sstStore = ( Get-ChildItem -Path \dc01SYSVOLwinitpro.rurootcertroots.sst )
$sstStore | Import-Certificate -CertStoreLocation Cert:LocalMachineRoot
Второй способ предполагает получение актуальных корневых сертификатов с помощью команды:
Certutil -syncWithWU -f \dc01SYSVOLrucore.netrootcert
В указанном сетевом каталоге появится ряд файлов корневых сертификатов (CRT) и в том числе файлы (authrootstl.cab, disallowedcertstl.cab, disallowedcert.sst, thumbprint.crt).
Затем с помощью GPP нужно изменить значение параметра реестра RootDirURL в ветке HKLMSoftwareMicrosoftSystemCertificatesAuthRootAutoUpdate. Этот параметр должен указывать на сетевую папку, из которой клиентам нужно получать новые корневые сертификаты. Перейдите в секцию редактора GPO Computer Configuration -> Preferences -> Windows Settings -> Registry. И создайте новый параметр реестра со значениями:
Action: Update
Hive: HKLM
Key path: SoftwareMicrosoftSystemCertificatesAuthRootAutoUpdate
Value name: RootDirURL
Type: REG_SZ
Value data: file://\dc01SYSVOLrucore.netrootcert
Осталось назначить эту политику на компьютеры и после обновления политик проверить появление новых корневых сертификатов в хранилище.
Политика Turn off Automatic Root Certificates Update в разделе Computer Configuration -> Administrative Templates -> System -> Internet Communication Management -> Internet Communication settings должна быть выключена или не настроена.
Установка основного сертификата — для Windows 10 (Vista, 7,
На примере сертификатов КриптоПро CSP
Для установки сертификата веб-узла выполните следующие действия. Щелкните правой клавишей мыши по файлу имя_сертификата.cer. В открывшемся контекстном меню выберите команду «Установить сертификат».
При запуске может быть открыто окно предупреждения системы безопасности. Нажмите кнопку «Открыть».
Откроется окно «Мастер импорта сертификатов».
В последующих шагах установки нажимайте на кнопку «Далее», не меняя параметров установки. После завершения установки, на экран будет выведено окно оповещения.
Нажмите на кнопку «ОК», окно будет закрыто. Поздравляем! Вы установили основной сертификат ssl.croinform.cer.
Шаг 3. Установка сертификатов из контейнера
Щелкните правой клавишей мыши по файлу. В открывшемся контекстном меню выберите команду «Установить сертификат».
При запуске может быть открыто окно предупреждения системы безопасности. Нажмите кнопку «Открыть».
Откроется окно «Мастер импорта сертификатов».
Нажмите кнопку «Далее». Мастер перейдет к выбору хранилища для размещения сертификатов
Установите переключатель в положение «Поместить все сертификаты в следующее хранилище» и нажмите кнопку «Обзор». Появится окно «Выбор хранилища сертификатов».
Выберите в списке пункт «Доверенные корневые центры сертификации» и нажмите кнопку «ОК». Окно «Выбор хранилища сертификатов» будет закрыто, и Вы вернетесь в окно «Мастер импорта сертификатов». В поле «Хранилище сертификатов» появится выбранное хранилище сертификатов.
Нажмите кнопку «Далее». Окно «Мастер импорта сертификатов» откроется на шаге «Завершение мастера импорта сертификатов».
Нажмите кнопку «Готово». На экране появится окно предупреждения системы безопасности.
Нажмите на кнопку «ОК», кно будет закрыто. Во всех последующих окнах предупреждения системы безопасности (они будут аналогичны первому) также нажмите кнопку «ОК». После завершения установки всех сертификатов на экран будет выведено окно оповещения.
Нажмите на кнопку «ОК», окно будет закрыто. Сертификаты из контейнера cacer.p7b успешно установлены.
Что такое ЭЦП и сертификат закрытого ключа
Электронная цифровая подпись используется во многих программных продуктах: 1С: Предприятие (и другие программы для ведения хозяйственного или бухгалтерского учёта), СБИС++, Контур.Экстерн (и прочие решения для работы с бухгалтерской и налоговой отчётностью) и других. Также ЭЦП нашла применение в обслуживании физических лиц при решении вопросов с государственными органами.
Как и при подписании бумажных документов, процесс подписания электронных носителей информации связан с «редактированием» первичного источника.
Электронная цифровая подпись документов осуществляется путём преобразования электронного документа с помощью закрытого ключа владельца, этот процесс и называется подписанием документа
На сегодняшний день сертификаты закрытого ключа чаще всего распространяются либо на обычных USB-флешках, либо на специальных защищённых носителях с тем же USB интерфейсом (Рутокен, eToken и так далее).
Если вы используете ЭЦП у себя дома, то каждый раз подключать/отключать токен быстро надоедает. Кроме того, носитель будет занимать один USB-порт, которых и так не всегда хватает для подключения всей необходимой периферии.
Если же вы используете ЭЦП на работе, то бывает, что ключ удостоверяющим центром выдан один, а подписывать документы должны разные люди. Таскать контейнер туда-сюда тоже не удобно, да ещё бывают и случаи, когда в одно время с сертификатом работают сразу несколько специалистов.
Кроме того, и дома, и, особенно, на работе, случается, что на одном компьютере необходимо производить действия с использованием сразу нескольких ключей цифровой подписи. Именно в тех случаях, когда использование физического носителя сертификата неудобно, можно прописать ключ ЭЦП в реестр КриптоПро и использовать сертификат, не подключая носитель к USB-порту компьютера.
Добавление в КриптоПро CSP
Запускаем программу от имени администратора правой кнопкой мыши или из меню самой утилиты на вкладке Общие
Теперь переходим на вкладку Оборудование и нажимаем на кнопку Настроить считыватели…
Если в открывшемся окне нет варианта Реестр, то, чтобы его здесь вывести, жмём на кнопку Добавить…
Далее, следуя командам Мастера установки считывателя поэтапно перемещаемся по окнам:
- Жмём кнопку Далее в первом окне.
- Из списка считывателей от всех производителей выбираем вариант Реестр и снова жмём Далее.
- Вводим произвольное имя считывателя, можно оставить название по умолчанию. Жмём Далее.
- В последнем окне видим оповещение, что после завершения настройки считывателя рекомендуется перезагрузить компьютер. Жмём кнопку Готово и самостоятельно перезагружаем машину.
Считыватель Реестр добавлен, о чём свидетельствует соответствующий пункт в окне Управление считывателями (напоминаем, что данное окно вызывается по пути КриптоПро — Оборудование — Настроить считыватели…)
Установка сертификата закрытого ключа КриптоПро CSP
В завершении настройки подписи документов без подключения носителя ключа к компьютеру нам остаётся только установить сертификат закрытого ключа из контейнера созданного носителя.
Чтобы установить сертификат в КриптоПро необходимо проделать следующее:
- В утилите CSP на вкладке Сервис жмём на кнопку Просмотреть сертификаты в контейнере…
- В открывшемся окне нажимаем на кнопку Обзор, где по заданному нами имени выбираем искомый носитель, подтвердив выбор кнопкой OK. Нажимаем Далее.
- В завершающем окне проверяем правильность выбора сертификата и подтверждаем решение кнопкой Установить.
Теперь у нас установлен Сертификат закрытого ключа из локального носителя. Настройка КриптоПро завершена, но вам следует помнить, что для многих программных продуктов также потребуется перепрописать новый ключ в настройках системы.
После проделанных действий мы можем подписывать документы без подключения ключа, будь то Рутокен, eToken или какой-то другой физический носитель.
Источники: http://croinform.ru/ — https://winitpro.ru/ — https://miradmin.ru/
Если Вам понравилась статья — поделитесь с друзьями
11 105 просмотров
Отказ от ответственности: Автор или издатель не публиковали эту статью для вредоносных целей. Вся размещенная информация была взята из открытых источников и представлена исключительно в ознакомительных целях а также не несет призыва к действию. Создано лишь в образовательных и развлекательных целях. Вся информация направлена на то, чтобы уберечь читателей от противозаконных действий. Все причиненные возможные убытки посетитель берет на себя. Автор проделывает все действия лишь на собственном оборудовании и в собственной сети. Не повторяйте ничего из прочитанного в реальной жизни. | Так же, если вы являетесь правообладателем размещенного на страницах портала материала, просьба написать нам через контактную форму жалобу на удаление определенной страницы, а также ознакомиться с инструкцией для правообладателей материалов. Спасибо за понимание.
Если вам понравились материалы сайта, вы можете поддержать проект финансово, переведя некоторую сумму с банковской карты, счёта мобильного телефона или из кошелька ЮMoney.