Windows 10 работа с сертификатами

Содержание

  • Способ 1: «Диспетчер сертификатов»
  • Способ 2: Оснастка «MMC»
  • Способ 3: «Панель управления»
  • Способ 4: Браузер Microsoft Edge
  • Вопросы и ответы

как посмотреть сертификаты в windows 10

Способ 1: «Диспетчер сертификатов»

Благодаря цифровым сертификатам пользователь может безопасно обновлять систему через «Центр обновлений» и выполнять другие действия в интернете, например обмениваться данными без опасения, что на ПК попадут подозрительные утилиты или файлы. В Windows 10 предусмотрен «Диспетчер сертификатов», через который можно посмотреть зашифрованные данные:

  1. Отыщите через «Пуск» диспетчер, прописав certmgr.msc. Запустите приложение от имени администратора.
  2. как посмотреть сертификаты в windows 10-01

  3. На панели слева отобразятся разделы с различными типами цифровых сертификатов.
  4. как посмотреть сертификаты в windows 10-02

  5. В каталоге «Личное» по умолчанию сертификатов нет, поскольку пользователь самостоятельно их устанавливает с токена или делает импорт данных. «Доверенные корневые центры сертификации» позволяют посмотреть данные от крупнейших издательств, которые представлены во внушительном списке. Благодаря им используемый браузер доверяет сертификатам большинства сайтов. Это обеспечивает безопасное пребывание в сети.
  6. как посмотреть сертификаты в windows 10-03

  7. Чтобы посмотреть содержимое корневого сертификата, дважды щелкните левой кнопкой мыши по его названию. В дополнительном окне есть общая информация, подробный состав и свойства каждого элемента, а также путь сертификации.
  8. как посмотреть сертификаты в windows 10-04

  9. С помощью «Мастера экспорта» можно скопировать сертификаты в самых распространенных форматах на другой компьютер. Чтобы запустить средство, нажмите на нужный объект правой кнопкой мыши, наведите курсор на «Все задачи», затем кликните по строке «Экспорт…».
  10. как посмотреть сертификаты в windows 10-05

  11. Для просмотра сертификатов в Windows 10 изучите разделы — их название говорит о содержимом. Зная название зашифрованных данные, можно отыскать их, если использовать вкладку «Действие» и функцию «Поиск сертификатов…».
  12. как посмотреть сертификаты в windows 10-06

Способ 2: Оснастка «MMC»

Штатный инструмент «Microsoft Management Console» («MMC») представляет собой графический интерфейс, предназначенный для настройки различных программ. Оснастка является компонентом «MMC», в которую встроен набор параметров модуля ОС или приложения. Просматривать и редактировать сертификаты Windows 10 можно, используя оснастку:

  1. Через «Пуск» Windows 10 найдите средство и запустите его с расширенными правами: это позволит вручную вносить изменения.
  2. как посмотреть сертификаты в windows 10-07

  3. В открывшемся окне нажмите на вкладку «Файл» и выберите пункт «Добавить или удалить оснастку…».
  4. как посмотреть сертификаты в windows 10-08

  5. Отобразится окно, разделенное на две части. Слева нужно выбрать тип оснастки. Отыщите в списке строку «Сертификаты» и кликните по ней левой кнопкой мыши. Нажмите на кнопку «Добавить».
  6. как посмотреть сертификаты в windows 10-09

  7. В новом окне выберите, какой сертификат будет редактироваться. Если вы не администратор, то управление данными может быть только для учетки пользователя, который выполнил вход в систему. В другом случае выберите пункт «учетной записи компьютера». Кликните по кнопке продолжения.
  8. как посмотреть сертификаты в windows 10-10

  9. В следующем шаге настройки отметьте то, чем будет управлять оснастка – «локальным компьютером». Нажмите на «Готово».
  10. как посмотреть сертификаты в windows 10-11

  11. В окне добавления и удаления оснасток в правой части появится пункт «Сертификаты». Нажмите по кнопке «ОК», чтобы закрыть окошко.
  12. как посмотреть сертификаты в windows 10-12

  13. На панели слева в интерфейсе «MMC» дважды кликните по строке с сертификатами, чтобы посмотреть доступные данные.
  14. как посмотреть сертификаты в windows 10-13

Визуально оснастка станет такая же, как и в Способе 1, когда напрямую открывался «Диспетчер сертификатов».

Способ 3: «Панель управления»

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

  1. Запустите «Панель управления» через кнопку меню «Пуск».
  2. как посмотреть сертификаты в windows 10-14

  3. Для удобства просмотра разделов выберите крупные или мелкие значки. Кликните по «Свойства браузера».
  4. как посмотреть сертификаты в windows 10-15

  5. В системном окне перейдите на вкладку «Содержание» и нажмите на кнопку «Сертификаты».
  6. как посмотреть сертификаты в windows 10-16

  7. Все типы данных разделены по вкладкам. Для просмотра их состава дважды кликните левой кнопкой мыши по названию сертификата.
  8. как посмотреть сертификаты в windows 10-17

В этом способе просмотр данных доступен без прав администратора.

Способ 4: Браузер Microsoft Edge

Еще один способ открыть окно с информацией о добавленных сертификатах – это использовать настройки фирменного браузера Microsoft Edge.

  1. Запустите обозреватель и откройте главное меню, кликнув по трем точкам в верхнем правом углу. Выберите «Настройки».
  2. как посмотреть сертификаты в windows 10-18

  3. На левой панели страницы с параметрами перейдите в раздел «Конфиденциальность, поиск и службы». В главном окне отыщите блок «Безопасность» и щелкните по строке «Управление сертификатами».
  4. как посмотреть сертификаты в windows 10-19

После этого запустится системное окно, где можно посмотреть сертификаты Windows 10.

Еще статьи по данной теме:

Помогла ли Вам статья?

Manage Certs with Windows Certificate Manager and PowerShellДанный материал является переводом оригинальной статьи «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
SOFTWARE\Microsoft\SystemCertificates\
Физическое хранилище для пользовательских открытых ключей
User HKEY_CURRENT_USER
SOFTWARE\Policies\Microsoft\SystemCertificates\
Физическое хранилище для пользовательских открытых ключей, установленных объектами групповой политики Active Directory (AD) (GPO)
Computer HKEY_LOCAL_MACHINE
SOFTWARE\Microsoft\SystemCertificates\
Физическое хранилище общедоступных ключей для всей машины
Computer HKEY_LOCAL_MACHINE
SOFTWARE\Microsoft\Cryptography\Services\
Физическое хранилище ключей, связанных с определенной службой
Computer HKEY_LOCAL_MACHINE
SOFTWARE\Policies\Microsoft\SystemCertificates\
Физическое хранилище открытых ключей для всей машины, установленных объектами групповой политики.
Computer HKEY_LOCAL_MACHINE
SOFTWARE\Microsoft\EnterpriseCertificates\
Физическое хранилище общедоступных ключей, установленных корпоративными контейнерами PKI в домене AD
Контекст Расположение файла Объяснение
User $env:APPDATA\Microsoft\SystemCertificates\ Физическое хранилище для пользовательских открытых ключей и указателей на закрытые ключи
User $env:APPDATA\Microsoft\Crypto\ Физическое хранилище для контейнеров закрытых ключей для конкретных пользователей
Computer $env:ProgramData\Microsoft\Crypto\ Физическое хранилище для контейнеров закрытых ключей для всей машины
Предварительные требования

В оставшейся части этой статьи вы найдете несколько примеров, демонстрирующих взаимодействие с хранилищами сертификатов 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 Trusted Root Certification Authorities store

Просмотр физических хранилищ

По умолчанию Диспетчер сертификатов Windows не отображает физические хранилища. Чтобы показать их, в верхнем меню оснастки выбирайте «View» > «Options«. Затем вы увидите варианты отображения физических хранилищ сертификатов. Включение этого параметра упрощает определение конкретных путей в Windows.

 The Certificates MMC View Options with Physical certificate stores selected.

Теперь вы можете видеть, что дополнительные контейнеры показаны в примере логического хранилища доверенных корневых центров сертификации, показанном ранее. Сертификаты по-прежнему сгруппированы относительно их логических хранилищ, но теперь вы можете увидеть физическое хранилище «Реестр».

Inspecting the physical cert stores

Проверка атрибутов в диспетчере сертификатов Windows

Есть много атрибутов сертификата, которые вы можете увидеть при просмотре их с помощью MMC. Например, вы, вероятно, захотите выбрать определенные сертификаты по их атрибутам. Самый простой способ сделать это — указать Serial Number сертификата или значение Thumbprint. Если сертификат был подписан центром сертификации (CA), при выдаче он будет иметь серийный номер. Thumbprint вычисляется каждый раз при просмотре сертификата.

Вы можете увидеть некоторые атрибуты сертификата, открыв его в MMC, как показано ниже.

Inspecting a Windows certificate

Следует отметить одну важную особенность — встроенные закрытые ключи. Сертификаты в Windows также могут иметь соответствующий закрытый ключ. Эти закрытые ключи хранятся в соответствующих физических хранилищах в виде зашифрованных файлов.

Чтобы быстро отличать сертификаты с соответствующим закрытым ключом и без него, посмотрите на значок сертификата. В Диспетчере сертификатов Windows, если значок просто выглядит как лист бумаги с лентой, соответствующий закрытый ключ отсутствует. Если у сертификата есть закрытый ключ, вы увидите ключ на значке MMC, и ключ в нижней части вкладки «Общие» при открытии сертификата

Certificate without an embedded private key (Сертификат без встроенного закрытого ключа)

Использование PowerShell по физическому хранилищу

Как и в случае с MMC, вы можете просматривать сертификаты и управлять ими с помощью PowerShell. Давайте сначала проверим сертификаты в их физических хранилищах (реестр и файловая система).

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

Get-ChildItem -Path 'HKCU:\Software\Microsoft\SystemCertificates\CA\Certificates'

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

Results of the installed certificates from the example commands

Другое распространенное хранилище — это Personal store. Ваши сертификаты для этого хранилища находятся в файловой системе, а не в реестре. В следующих командах мы покажем эти различные физические пути и их цели.

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

Get-ChildItem -Path $env:APPDATA\Microsoft\SystemCertificates\My\Certificates\

Каждый файл, возвращаемый в приведенной ниже команде, является ссылкой на объект для закрытого ключа, созданный поставщиком хранилища ключей (KSP). Имя файла соответствует идентификатору ключа субъекта сертификата. К каждому устанавливаемому вами закрытому ключу будет добавлен соответствующий файл.

Get-ChildItem -Path $env:APPDATA\Microsoft\SystemCertificates\My\Keys\

Каждый файл в каталоге, возвращаемый следующей командой, является уникальным контейнером для зашифрованного закрытого ключа, созданного KSP. Нет прямой связи между именем файла и сертификатом, но файл является целью указателя в предыдущей команде.

Get-ChildItem -Path $env:APPDATA\Microsoft\Crypto\Keys
Использование 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:\CurrentUser\Root\'

Возвращенные объекты будут объектами сертификатов, которые вы можете использовать в следующих примерах.

Общие расширения уже доступны как свойства объектов сертификата. В приведенном ниже примере вы используете Get-Member для вывода списка всех свойств возвращаемых объектов.

Get-ChildItem -Path 'Cert:\CurrentUser\Root\' | Get-Member -MemberType Properties

The properties available for the returned certificate objects

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

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

Покажем пример взаимодействия с свойствами типа ScriptProperty. В приведенной ниже команде вы извлекаете Key Usages.

((Get-ChildItem -Path 'Cert:\CurrentUser\Root\' | 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:\CurrentUser\Root\' | Where-Object {$_.Thumbprint -eq $thumb}
Создание самозаверяющих (self-signed) сертификатов с помощью PowerShell

PowerShell может создавать самозаверяющие (self-signed) сертификаты с помощью командлета New-SelfSignedCertificate. Самозаверяющие сертификаты полезны для тестирования, поскольку они позволяют генерировать пару открытого и закрытого ключей без использования центра сертификации.

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

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

New-SelfSignedCertificate -Subject 'User-Test' -CertStoreLocation 'Cert:\CurrentUser\My'
New-SelfSignedCertificate -Subject 'Computer-Test' -CertStoreLocation 'Cert:\LocalMachine\My'

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

Импорт и экспорт сертификатов в MMC

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

Оба они требуют способов хранения этих криптографических объектов в стандартных форматах. Экспорт предоставляет функции для сохранения этих объектов и обеспечения использования широко распространенных стандартных форматов файлов. Импорт позволяет вам переносить криптографические объекты в операционные системы Windows.

Экспорт сертификатов из MMC относительно прост. Чтобы экспортировать сертификат без закрытого ключа, щелкните сертификат в MMC, выберите меню «Все задачи», а затем «Экспорт».

Во время экспорта вам будет предложено указать формат файла, как показано ниже. Наиболее распространены варианты кодирования — DER или Base-64

Exporting a certificate with no private key or one that is marked as not exportable

Экспорт закрытых ключей

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

  • Вошедшая в систему учетная запись должна иметь разрешение на закрытый ключ (только для сертификатов компьютеров);
  • Закрытый ключ должен быть помечен как экспортируемый.

Чтобы проверить разрешения для закрытых ключей локального компьютера, вы можете выбрать сертификат с закрытым ключом, выбрать «Все задачи» и «Управление закрытыми ключами» в MMC «Сертификаты». В открывшемся диалоговом окне отображаются записи управления доступом для закрытых ключей.

he Basic Security Property Page for the private keys of a certificate with the Subject of ServerName

Когда выше обозначенные условия выполнены, вы можете выбрать сертификат, щелкнуть «Все задачи», а затем «Экспорт», как если бы вы использовали сертификат только с открытым ключом. При экспорте теперь у вас должна присутствовать возможность выбора экспорта закрытого ключа («Yes, export the private key»), как показано ниже.

Certificate Export Wizard with exportable 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 будет использовать мастер импорта сертификатов.

Certificate Import Wizard with a PFX file

При использовании мастера импорта сертификатов для 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:\CurrentUser\My\' | Where-Object {$_.Subject -eq $_.Issuer}).PSPath

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

Export-Certificate -FilePath $env:USERPROFILE\Desktop\certificate.cer -Cert $certificate

Теперь давайте посмотрим на экспорт закрытого ключа. Ниже вы проверяете, что у выбранного сертификата есть закрытый ключ. Если он не возвращает True, то команда Get-Item, скорее всего, выбрала неправильный сертификат.

$certificate.HasPrivateKey

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

$pfxPassword = "ComplexPassword!" | ConvertTo-SecureString -AsPlainText -Force
Export-PfxCertificate -FilePath $env:USERPROFILE\Desktop\certificate.pfx -Password $pfxPassword -Cert $certificate

В случае, если необходимо выполнить импорт, как и при экспорте, есть две команды. Одна команда для импорта сертификатов и одна для импорта файлов PFX.

Ниже команда Import-Certificate импортирует файл в формате DER, который вы экспортировали ранее, в личное хранилище текущего пользователя.

Import-Certificate -FilePath $env:USERPROFILE\Desktop\certificate.cer -CertStoreLocation 'Cert:\CurrentUser\My'

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

$pfxPassword = "ComplexPassword!" | ConvertTo-SecureString -AsPlainText -Force
Import-PfxCertificate -Exportable -Password $pfxPassword -CertStoreLocation 'Cert:\CurrentUser\My' -FilePath $env:USERPROFILE\Desktop\certificate.pfx

Имейте в виду, что пароль должен быть защищенной строкой. Кроме того, если вы импортируете в хранилище локального компьютера (например, «Cert:\LocalMachine«), вам нужно будет запустить команду из командной строки администратора с повышенными привилегиями.

В приведенном выше примере вы также используете параметр -Exportable с командой, отмечая закрытый ключ как экспортируемый в будущем. По умолчанию (без указания этого параметра) экспорт не используется. Экспортируемые закрытые ключи – отельный аспект информационной безопасности, заслуживающий отдельного внимания.

Удаление сертификатов с помощью PowerShell

При удалении сертификатов помните, что понятие «Корзина Windows» в этом случае отсутствует. Как только вы удалите сертификат, он исчезнет! Это означает, что очень важно подтвердить, что вы удаляете правильный сертификат, путем проверки уникального идентификатора, такого как серийный номер или значение расширения Thumbprint.

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

$certificate = Get-Item (Get-ChildItem -Path 'Cert:\CurrentUser\My\' | Where-Object {$_.Subject -eq $_.Issuer}).PSPath

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

$certificate.Thumbprint
$certificate.SerialNumber
$certificate.Subject

Убедитесь, что вы выбрали правильный сертификат, который собираетесь удалить.

Приведенная ниже команда удаляет все выбранные объекты сертификата, используйте с осторожностью! Передав объект $certificate через конвейер в командлет Remove-Item в приведенной ниже команде, вы удалите все содержимое сертификата без каких-либо запросов на проверку.

$certificate | Remove-Item
Резюме

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

Где находится хранилище сертификатов в ОС Windows 10 и 4 способа просмотра

Система цифровых сертификатов используется аналогично паролям, для подтверждения личности пользователя или ПК, обмена электронной информацией в виртуальной сети. Легковесные файлы содержат личные данные, которые применяются при идентификации личности. Хранилище сертификатов в ОС Windows 10 находится в секретном месте. Иногда фирмам приходится настраивать личные сертификаты, поэтому им важно знать местоположение файлов.

Для чего знать, где хранятся сертификаты?

Каждый файл в хранилище предусмотрен для защиты операционки цифрового устройства. Они препятствуют проникновению вредоносных программ в систему. Отдельная цифровая подпись отвечает за определенный скачанный софт.

screenshot_1

Знание о том, где хранятся такие файлы, требуется в случае просмотра или установки корневых, личных сертификатов. В «десятке» инструменты находятся в контейнере двух типов:

  • Certificate store локального ПК – включают список файлов для проверки оригинальности сервера.
  • Certificate store для пользователя – хранят сертификаты утилит, которые запускает юзер.

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

screenshot_2

Просмотр установленных сертификатов Windows 10

Список важных объектов: сертификаты для оборудования, персональные файлы – находят несколькими способами с помощью встроенных инструментов, сторонних утилит.

Через «КриптоПро»

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

Для включения программы ее требуется скачать с официального сайта разработчика, инсталлировать на компьютер. Все действия выполняются с правами Администратора. Во время установки ПО можно выполнять настройки через панель свойств. После инсталляции потребуется перезагрузить устройство.

screenshot_3

Просмотр проверочных ключей ЭЦП происходит по следующему алгоритму:

  • Зайти в меню Пуск.

screenshot_4

  • Открыть «Все программы».
  • Выбрать «КриптоПро».

screenshot_5

  • Щелкнуть по пункту «Сертификаты».

screenshot_6

В открывшемся окне пользователь увидит все актуальные корневые, личные файлы. Обладая администраторскими правами, можно управлять файлами в «десятке»: выполнять копирование, редактирование, деинсталлировать файлы.

Через Certmgr

Диспетчер разрешает проводить различные действия с цифровыми документами. Консоль является частью операционной системы, включает инструменты для функций управления.

Для просмотра данных нужно следовать инструкции:

  • Зайти в Пуск.

screenshot_7

  • Открыть Командную строку, набрать: c Нажать «Enter».

screenshot_8

  • В меню появившегося окна выбрать «Личное» и «Корневые сертификаты…». Зайдя в разделы, можно развернуть реестры с полным списком ключей.

screenshot_9

Без прав Администратора утилита не заработает. Софт имеет ограничение в шифровании данных, где происходит специальное кодирование файлов.

Через Internet Explorer

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

С помощью браузера можно найти ЭЦП, следуя инструкции:

  • Запустить Интернет Эксплорер.

screenshot_10

  • Выбрать «Свойства браузера».

screenshot_11

  • Тапнуть по разделу «Содержание».
  • Нажать на подраздел «Сертификаты».

screenshot_12

В результате откроется содержимое с полным списком искомых файлов. В веб-сервисе существует возможность их добавления. Юзеру стоит помнить, что корневые ЭЦП удостоверяющих центров деактивировать запрещено.

Аналогичный способ поиска документов выполняется через Центр управления сетями или общим доступом:

  • Открыть Панель управления.

screenshot_13

  • Войти в «Свойства браузера».

screenshot_14

  • Зайти в меню «Содержание» и «Сертификаты».

screenshot_15

Преимущество метода заключается в том, что посмотреть список ЭЦП можно без администраторских прав. Для обычных людей доступен только просмотр, вносить изменения запрещено.

Через контроль управления

Представляет собой один из важнейших компонентов ОС Виндовс 10. С помощью встроенного средства осуществляется управление, запуск, настройка большинства системных функций. Также можно найти, где лежат сертифицированные файлы ЭЦП для их редактирования.

Пошаговая инструкция:

  • Нажать: «Win + R».
  • Ввести в строку запроса: cmd. Нажать «Enter».

screenshot_16

  • после этого перейти по команде mmc в терминал;

screenshot_17

  • Щелкнуть по вкладке «Файл».

screenshot_18

  • В открывшемся списке тапнуть «Добавить изолированную оснастку».

screenshot_19

  • Нажать на раздел «Сертификаты».

screenshot_20

Все действия пользователь может выполнять только с правами Администратора. Такой вариант подходит не каждому человеку, так как некоторые запросы вводятся через Командную строку. Сервисом обычно пользуются системные администраторы или люди, хорошо разбирающиеся в теме.

Существует целый список сторонних ресурсов, позволяющих управлять сертификатами, инсталлированными в ОС Виндовс 10. Но пользоваться такими утилитами не рекомендуется, так как нет гарантии, что в них присутствует команда отправки сертификата на внешний сервер. Надежное сертифицированное приложение – это «КриптоПро», которое дает гарантию защиты от несанкционированного доступа посторонних лиц к ЭЦП.

screenshot_21

Также в последних версиях Винды зашифрованные файлы просматривают, перейдя по пути: C:Users\ПОЛЬЗОВАТЕЛЬ\AppData\Roaming\Microsoft\System\Certificates. Словосочетание «Пользователь» меняется на название учетной записи. В результате откроется полный список засекреченных данных.

Сертификаты созданы для безопасной работы цифровой техники. Их достоверность гарантирована сертификационным центром. Управление ЭЦП требует определенных знаний, поэтому работу должен выполнять специалист или продвинутый пользователь.



Время на прочтение
12 мин

Количество просмотров 5.6K

Раньше я не уделял внимания формату файла сертификата открытого ключа. Теперь я немного покопался в этом формате и нашел там для себя много нового и интересного. В этой статье я не ставлю себе цель описать формат файла сертификата во всей полноте (это слишком большая работа; кроме того, эта работа уже сделана в тексте соответствующего стандарта), но хочу отметить некоторые интересные моменты.

Стандарты

Формат сертификата открытого ключа описан в стандарте «X.509», который создан «Международным союзом электросвязи» (сокращенно «МСЭ», по-английски «ITU»). Точнее, над стандартом работали и работают в отделе (секторе) стандартизации электросвязи этой организации (по-английски «ITU-T», в прошлом веке он назывался «CCITT»).

Первая версия (редакция) этого стандарта появилась в 1988 году, а сейчас актуальна версия 9 от 2019 года. Над стандартом продолжают работать. Однако, насколько я понимаю, сейчас в интернете больше ориентируются на документ «RFC 5280» (над документами «RFC» работает «Инженерный совет Интернета», по-английски «IETF»), адаптирующий стандарт «X.509» к реалиям интернета. Вроде бы, именно из документа «RFC 5280» появился термин «PKIX» (инфраструктура открытых ключей [PKI] на базе стандарта «X.509»). Документ «RFC 5280» вышел в 2008 году, в нем идет речь о реализации версии 3 стандарта «X.509» (эта версия разрабатывалась в период 1997-2004 годов).

Файл для анализа и инструменты анализа

Я создал из диспетчера веб-сервера IIS самозаверенный сертификат открытого ключа для тестирования работы с локальным сайтом по протоколу HTTPS. Этот файл я и буду тут анализировать.

В качестве инструмента для анализа я в основном использую программу-оболочку «PowerShell» версии 7. Напомню, я работаю в операционной системе «Windows 10».

Иногда заглядываю в сохраненные консоли «certlm.msc» (хранилище сертификатов компьютера, для работы требуются права администратора компьютера) и «certmgr.msc» (хранилище сертификатов текущего пользователя, для работы достаточно прав текущего пользователя). Их легко можно вызвать прямо из командной строки из любого местоположения с помощью команд certlm и certmgr, так как эти файлы хранятся в системной папке %windir%\System32\. Файлы сохраненных консолей с расширением «.msc» по умолчанию привязаны (их имена при запуске передаются в качестве входного параметра) к исполняемому файлу «mmc.exe» (компонента «Консоль управления Microsoft» операционной системы), который тоже хранится в системной папке %windir%\System32\.

Просмотр хранилищ сертификатов и сертификатов в них из «PowerShell»

В файловых системах операционных систем «Windows» обычно бывает несколько «корней» (в отличие от Unix-подобных операционных систем; там в файловой системе один «корень»), которые обозначают латинскими буквами с двоеточием (например, «A:», «C:», «D:» и так далее) и называют «логическими дисками» (или «томами»), по-английски «logical drive» (или «volume»).

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

В документации программы-оболочки «PowerShell» буквенные обозначения томов называют «file system drive» (том файловой системы).

По принципу томов файловой системы в языке «PowerShell» существуют так называемые «провайдеры» или «поставщики» (по-английски «provider»). У этих провайдеров тоже есть «приводы»: это короткие слова или даже части слов (или аббревиатуры), которые используются для предоставления (обеспечения, поставки) быстрого и простого доступа к данным или компонентам, доступ к которым другими способами затруднен. Например, для доступа к переменным среды можно использовать привод «Env:» провайдера переменных среды, для доступа к реестру Windows можно использовать приводы «HKLM:» и «HKCU:» провайдера реестра и так далее. См. статью «about_Providers» документации программы-оболочки «PowerShell».

Для доступа к хранилищам сертификатов и сертификатам в этих хранилищах можно использовать привод Cert: провайдера сертификатов. При этом с хранилищами сертификатов можно работать так же, как с обычными папками файловой системы (напомню, хранилища сертификатов не соответствуют какой-либо папке файловой системы, это просто что-то вроде фильтра, инструмента, который собирает сведения о цифровых сертификатах, физически хранящихся в разных местах на компьютере), а с сертификатами можно работать так же, как с обычными файлами в файловой системе. Удобно продолжать использовать псевдонимы cd (сменить папку) и dir (показать список файлов и папок в текущей папке) командлетов Set-Location и Get-ChildItem соответственно. См. статью «about_Certificate_Provider» документации «PowerShell».

Итак, в командной строке программы-оболочки «PowerShell» перейдем в том Cert: и выведем список хранилищ сертификатов. Вот как это выглядит у меня:

PS C:\> cd Cert:\
PS Cert:\> dir

Location   : CurrentUser
StoreNames : {ADDRESSBOOK, Trust, My, SmartCardRoot…}

Location   : LocalMachine
StoreNames : {ClientAuthIssuer, WindowsServerUpdateServices, Trust, AAD Token Issuer…}

Это те самые два главных хранилища сертификатов, которые описаны, к примеру, в статье «Working with Certificates» на сайте компании «Microsoft»: хранилище сертификатов текущего пользователя и хранилище сертификатов компьютера. Под названием каждого из этих хранилищ виден массив названий подхранилищ (каждый массив завершается многоточием, которое обозначает то, что все названия из массива не влезли в отведенную строку).

Теперь можно последовательно перейти к нужному хранилищу (подхранилищу) сертификатов, либо можно сразу перейти к нужному подхранилищу, набрав полный путь (если вы уже сразу знаете нужный путь целиком):

PS C:\> cd Cert:\LocalMachine\My
PS Cert:\LocalMachine\My> dir

   PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\My

Thumbprint                                Subject         EnhancedKeyUsageList
----------                                -------         --------------------
D4A1741E3ACC4C8A89E5F7AA7901D8FE1C95C013  CN=IlyaComp     Проверка подлинности сервера

Как видно из кода выше, в подхранилище Cert:\LocalMachine\My есть только один сертификат открытого ключа. Команда dir уже вывела таблицу с тремя свойствами этого сертификата в окно терминала. Но следует понимать, что у сертификата гораздо больше свойств, чем три. Просто остальные свойства не поместились по ширине в окно терминала. Для вывода всех свойств сертификата есть более удобные способы, чем способ по умолчанию.

Просмотр всех свойств сертификата из «PowerShell»

К конкретному сертификату можно обратиться по его так называемому «отпечатку» (thumbprint). Как видно из кода выше, отпечаток представляет собой довольно длинное шестнадцатеричное число. Очевидно, что при использовании его лучше скопировать, а не набирать вручную.

Итак, для удобства сохраним нужный объект сертификата в переменную $c, чтобы не обращаться каждый раз к длиннющему отпечатку сертификата. Затем через оператор конвейера (pipeline) | передадим объект сертификата командлету Format-List, который выведет все свойства сертификата в окно терминала в виде списка (символ звездочки * обозначает вывод всех свойств сертификата, но этому командлету можно передать ограниченный список свойств, чтобы вывести только те, которые нужны в данный момент):

PS Cert:\LocalMachine\My> $c = Get-Item D4A1741E3ACC4C8A89E5F7AA7901D8FE1C95C013
PS Cert:\LocalMachine\My> $c | Format-List *

Результат:

PSPath                   : Microsoft.PowerShell.Security
                           \Certificate::LocalMachine\My
                           \D4A1741E3ACC4C8A89E5F7AA7901D8FE1C95C013
PSParentPath             : Microsoft.PowerShell.Security\Certificate::LocalMachine\My
PSChildName              : D4A1741E3ACC4C8A89E5F7AA7901D8FE1C95C013
PSDrive                  : Cert
PSProvider               : Microsoft.PowerShell.Security\Certificate
PSIsContainer            : False
EnhancedKeyUsageList     : {Проверка подлинности сервера (1.3.6.1.5.5.7.3.1)}
DnsNameList              : {IlyaComp}
SendAsTrustedIssuer      : False
EnrollmentPolicyEndPoint
    : Microsoft.CertificateServices.Commands.EnrollmentEndPointProperty
EnrollmentServerEndPoint
    : Microsoft.CertificateServices.Commands.EnrollmentEndPointProperty
PolicyId                 :
Archived                 : False
Extensions               : {System.Security.Cryptography.Oid,
                            System.Security.Cryptography.Oid,
                            System.Security.Cryptography.Oid}
FriendlyName             : localhost
HasPrivateKey            : True
PrivateKey               :
IssuerName               
    : System.Security.Cryptography.X509Certificates.X500DistinguishedName
NotAfter                 : 20.10.2023 3:00:00
NotBefore                : 20.10.2022 17:56:04
PublicKey                : System.Security.Cryptography.X509Certificates.PublicKey
RawData                  : {48, 130, 2, 233…}
SerialNumber             : 4931C370DB54C8B8426A88B0D254E17E
SignatureAlgorithm       : System.Security.Cryptography.Oid
SubjectName              
    : System.Security.Cryptography.X509Certificates.X500DistinguishedName
Thumbprint               : D4A1741E3ACC4C8A89E5F7AA7901D8FE1C95C013
Version                  : 3
Handle                   : 2125934225808
Issuer                   : CN=IlyaComp
Subject                  : CN=IlyaComp

Как видно из кода выше, для некоторых свойств, которые попроще, в списке сразу выводятся значения этих свойств. Для свойств, в которых записана ссылка на объект, выводится только тип объекта. Чтобы просмотреть записанный в таком свойстве объект, нужно забираться поглубже. Значением некоторых свойств является массив байтов, в этом случае значения байтов в массиве выводятся через запятую. В некоторые свойства не записано никакого значения, поэтому их значение равно значению $null (в списке выше напротив названий таких свойств после двоеточия ничего не выведено).

В свойстве Version записано значение 3. Насколько я понимаю, тут подразумевается версия 3 стандарта «X.509», о которой упоминалось в начале данной статьи.

В этот раз меня в первую очередь интересовали свойства, в которых может содержаться информация об именах и названиях: DnsNameList, Extensions, FriendlyName, IssuerName, SubjectName, Issuer и Subject.

При анализе значений свойств сертификата может понадобиться умение читать содержимое массивов байтов. Это не очень сложно, если знать, по каким стандартам эти байтовые массивы в значениях свойств сертификата организованы и где можно удобно просмотреть стандарты, почитать соответствующие справочники. Ниже я покажу, как можно это делать, на примере свойства IssuerName («имя издателя», то есть имя сущности, создавшей и заверившей данный сертификат открытого ключа).

Читаем байтовый массив

Как видно из списка свойств сертификата выше, свойство IssuerName содержит ссылку на объект класса System.Security. Cryptography. X509Certificates. X500DistinguishedName. Просмотрим список свойств со значениями для этого объекта:

PS Cert:\LocalMachine\My> $c.IssuerName | Format-List *

Name    : CN=IlyaComp
Oid     : System.Security.Cryptography.Oid
RawData : {48, 19, 49, 17…}

Очевидно, что значение свойства Issuer сертификата в данном случае совпадает со значением поля Name свойства IssuerName сертификата. Но мне стало интересно, что содержится в поле RawData свойства IssuerName сертификата. Видно, что там содержится массив байтов. Но что они означают?

Сначала я предположил, что там записано то же самое, что в поле Name. И действительно, часть байтового массива содержит строку IlyaComp в кодировке UTF-8. Но там есть и что-то еще. С налета разобраться в этом не получилось, поэтому я приступил к подробному анализу. Получим в окно терминала полное содержимое разбираемого массива байтов:

PS Cert:\LocalMachine\My> "" + $c.IssuerName.RawData
48 19 49 17 48 15 6 3 85 4 3 19 8 73 108 121 97 67 111 109 112

По умолчанию программа-оболочка «PowerShell» выводит массив «вертикально», то есть выделяя для каждого элемента массива отдельную строку. Это неудобно. Для вывода элементов массива «горизонтально» (в одной строке) я применяю в коде выше конкатенацию пустой строки и анализируемого массива.

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

PS Cert:\LocalMachine\My> "" + ($c.IssuerName.RawData | ForEach-Object ToString x2)
30 13 31 11 30 0f 06 03 55 04 03 13 08 49 6c 79 61 43 6f 6d 70

В вышеприведенном коде передаем элементы массива байтов через конвейер (pipeline) | командлету ForEach-Object, который применяет к каждому входящему элементу массива (байту) метод System.Byte.ToString. Этот метод преобразует значение байта (целое число) в строку в указанном формате. В данном случае в качестве указания формата в метод System.Byte.ToString передаем строку x2.

В этой строке формата латинская буква х указывает на вывод числа в шестнадцатеричной системе счисления (регистр буквы х в данном случае имеет значение, от него зависит регистр букв, которыми будут обозначены шестнадцатеричные цифры a, b, c, d, e, f). Число 2 указывает на число цифр в выводимых шестнадцатеричных числах. Очевидно (если вы понимаете, как сочетаются двоичная и шестнадцатеричная системы счисления), что для обозначения значения каждого байта нужно шестнадцатеричное число из двух цифр. (Тут подробнее про настройку форматирования чисел в строке.)

Язык ASN.1, способ сериализации DER и дерево идентификаторов объектов OID

Как оказалось, заполнение байтовых массивов в значениях сертификата открытого ключа по стандарту «X.509» выполняется на языке описания абстрактного синтаксиса данных «ASN.1» (расшифровывается как «Abstract Syntax Notation One»). Я немного о нем почитал и он мне понравился. Тут речь об «абстрактном синтаксисе» потому, что этот язык описывает любые структуры данных, независимо от конкретного языка программирования. Этот язык был создан в 1984 году и до сих пор разрабатывается уже упоминавшейся выше организацией «ITU-T».

Кроме описания структур данных в этом языке описаны разные способы сериализации полученного описания данных. Под словом «сериализация» подразумевают перевод данных в последовательность байтов (или в «серию» байтов, откуда и произошел термин «сериализация»). Там описано более десятка разных способов. Для сертификатов открытого ключа по стандарту «X.509» применяется способ сериализации DER (Distinguished Encoding Rules). Тут подробнее: раздел «Encodings» англоязычной статьи википедии «ASN.1», про способ сериализации DER в англоязычной статье википедии про стандарт «X.690», статья «A Warm Welcome to ASN.1 and DER» на сайте «Let’s Encrypt».

Давайте посмотрим, как это работает на практике на примере байтового массива, который я получил выше.

При сериализации по методу «DER» согласно языка «ASN.1» применяется известный метод записи данных «TLV» (расшифровывается как «type-length-value» или «tag-length-value»). По-русски название этого метода можно озвучить как «тип-длина-значение». Согласно этого метода данные (в том числе вложенные) записываются в указанном порядке: сначала тип данных, потом — длина данных в байтах, и, наконец, значение (собственно, сами данные).

Будем последовательно применять это правило для расшифровки вышеуказанного массива байтов. Возьмем первые два байта:

30 13 31 11 30 0f 06 03 55 04 03 13 08 49 6c 79 61 43 6f 6d 70
30 - SEQUENCE (тип данных)
13 - размер данных: 19₁₀ байтов
    данные: 31 11 30 0f 06 03 55 04 03 13 08 49 6c 79 61 43 6f 6d 70

Первый байт нашего массива со значением 30 в языке «ASN.1» означает тип данных «SEQUENCE» (набор данных разных типов; например, в языке Си эквивалентом этого типа данных является тип struct). Кстати, для быстрого ознакомления с языком «ASN.1» рекомендую ознакомиться с большой обзорной статьей «A Warm Welcome to ASN.1 and DER» на сайте известного бесплатного центра сертификации «Let’s Encrypt». Эта статья очень удобна для начинающих, там есть разные таблицы соответствия, например, значений байтов и типов данных.

Как видно из кода выше, в нашем случае в байтовом массиве записана структура данных типа «SEQUENCE», имеющая размер в 13 (шестнадцатеричная система) байтов или 19 (десятичная система) байтов. Данными являются 19 байтов, идущие после байта, указывающего размер данных. Если посчитать, получается, что весь остаток массива, кроме первых двух байт, имеет размер в 19 байт, следовательно, кроме структуры данных «SEQUENCE» в наш массив больше ничего не записано.

Продолжим расшифровку. Возьмем следующие два байта.

SEQUENCE {
    31 11 30 0f 06 03 55 04 03 13 08 49 6c 79 61 43 6f 6d 70
    31 - SET (тип данных)
    11 - размер данных: 17₁₀ байтов
        данные: 30 0f 06 03 55 04 03 13 08 49 6c 79 61 43 6f 6d 70
}

Тип данных «SET» в языке «ASN.1», в принципе, похож на «SEQUENCE», только в данных типа «SEQUENCE» (последовательность) порядок вложенных элементов сохраняется (важен), а в данных типа «SET» (множество) порядок вложенных элементов не сохраняется (не имеет значения). Перейдем к следующим двум байтам (думаю, принцип действия метода «type-length-value» к этому моменту уже должен был проясниться).

SEQUENCE {
    SET {
        30 0f 06 03 55 04 03 13 08 49 6c 79 61 43 6f 6d 70
        30 - SEQUENCE (тип данных)
        0f - размер данных: 15₁₀ байтов
            данные: 06 03 55 04 03 13 08 49 6c 79 61 43 6f 6d 70
    }
}

Четвертый шаг:

SEQUENCE {
    SET {
        SEQUENCE {
            06 03 55 04 03 13 08 49 6c 79 61 43 6f 6d 70
            06 - OBJECT IDENTIFIER (тип данных)
            03 - размер данных: 3₁₀ байта
                данные: 55 04 03
            13 - PrintableString (тип данных)
            08 - размер данных: 8₁₀ байтов
                данные: 49 6c 79 61 43 6f 6d 70
        }
    }
}

На этом шаге расшифровки получилось, что в структуру данных типа «SEQUENCE» входит сразу два вложенных элемента данных: типа «OBJECT IDENTIFIER» и типа «PrintableString». Второй из них — это тип данных, эквивалентный обычной строке. В данном случае в 8 байтах 49 6c 79 61 43 6f 6d 70 закодировано имя IlyaComp в кодировке UTF-8.

Под типом данных «OBJECT IDENTIFIER» (сокращенно «OID») подразумевают стандартизированное уже несколько раз упоминавшейся организацией «ITU» и международной организацией по стандартизации «ISO/IEC» дерево идентификаторов объектов. В интернете есть ряд сайтов, предоставляющих возможность просмотреть это дерево объектов и найти нужный объект. Например: http://oidref.com.

Каждый идентификатор объекта представляет собой набор номеров пунктов (веток дерева, целых чисел) через точку. В нашем случае в трех байтах 55 04 03 закодирован идентификатор объекта из четырех чисел. Первые два числа X и Y идентификатора объекта кодируются по формуле 40₁₀ * X + Y в первый байт данных, представляющих идентификатор объекта. Раскодируем идентификатор объекта:

55 04 03 = 85₁₀.4.3 = (40₁₀ * 2 + 5).4.3 = 2.5.4.3 = http://oidref.com/2.5.4.3

В идентификаторе объекта все пункты имеют определенное значение:

  • 2 — ветка дерева, общая для организаций «ISO» и «ITU-T»;

  • 2.5 — ветка дерева, представляющая службы каталогов;

  • 2.5.4 — ветка дерева, представляющая типы атрибутов (свойств) объектов в службах каталогов;

  • 2.5.4.3 — ветка дерева, представляющая тип «Common name» атрибута (сокращенно «CN»).

Результат расшифровки байтового массива:

SEQUENCE {
    SET {
        SEQUENCE {
            OBJECT IDENTIFIER: 2.5.4.3 (Common name)
            PrintableString: "IlyaComp"
        }
    }
}

Это же коротко записано как CN=IlyaComp и в виде строки содержится в поле Name свойства IssuerName сертификата открытого ключа, а также в свойствах Issuer и Subject сертификата.

Начало:
1. Криптография: простейшие термины этой науки
2. Система шифрования с открытым ключом
3. Зачем нужны центры сертификации при асимметричном шифровании
4. Зачем нужны самозаверенные сертификаты открытого ключа

Хранилища сертификатов

В операционных системах «Windows» (у меня установлена «Windows 10», так что речь в основном пойдет про нее) сертификаты хранятся на логическом уровне в так называемых «хранилищах» (по-английски «store» или «storage»).

Под «сертификатами» в этом посте имеются в виду файлы цифровых сертификатов открытого ключа (см. подробнее об этом предыдущие посты).

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

На компьютере под управлением операционной системы «Windows 10» существует два главных хранилища сертификатов:

– хранилище компьютера (локальной машины);
– хранилище текущего пользователя.

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

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

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

Подхранилища

Оба вышеописанных хранилища разбиты на подхранилища (папки с сертификатами). У меня их больше десятка. Но самые важные из них сейчас для меня два следующих:

– Личное;
– Доверенные корневые центры сертификации.

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

Как обычно, в операционной системе «Windows» есть множество способов для выполнения нужной задачи. Для работы с хранилищами сертификатов, в частности, можно использовать следующее:

– стандартный способ через графический (оконный) интерфейс;
– из командной строки в программе-оболочке «PowerShell»;
– различные программы командной строки вроде «certmgr.exe» или «certutil.exe»;
– можно написать программу для работы с сертификатами самому и так далее.

В этом посте я буду рассматривать только стандартный способ работы с хранилищами сертификатов через графический (оконный) интерфейс.

Консоль управления Microsoft (MMC)

Операционные системы «Windows» включают очень старый компонент (программу), который называется по-английски «Microsoft Management Console», сокращенно «MMC» (по-русски «Консоль управления Microsoft»). Первая версия этой программы была выпущена в 1998 году, но она до сих пор в строю и ее можно использовать для решения различных административных задач в рамках операционной системы. Насколько я понимаю, актуальная версия этой программы 3.0. Эта версия появилась в составе пакета обновлений SP3 для «Windows XP» (2007-2008 годы) и с тех пор в нее не вносилось заметных изменений. В нашем случае ее можно использовать для работы с хранилищами сертификатов.

Исполняемый файл этой программы — «mmc.exe». Ее можно вызвать с помощью команды «mmc» из любого местоположения, так как она хранится в системной папке %windir%\System32\. Я обычно набираю команду «mmc» в строке поиска «Windows 10» возле кнопки «Пуск», поиск находит эту программу и выдает ссылку «Открыть» для ее запуска.

Насколько я понимаю, сама консоль — это просто пустая площадка, на которую можно добавлять различные модули. Таким образом, каждый может настроить для своей работы такую площадку, которая ему больше всего подходит, регулируя состав модулей на площадке. Каждый модуль предназначен для решения своей административной задачи. Отдельный модуль представляет собой файл динамически подключаемой библиотеки (файл с расширением «.dll»), взаимодействие между модулем и консолью выполняется по стандарту «COM».

Этих модулей довольно много, их можно добавить в консоль через меню «Файл – Добавить или удалить оснастку…». По-английски такой модуль называют «snap-in». Почему выбрано такое название — не знаю, обычно такие модули по-английски называют «plug-in» (по-русски «плагин»). Думаю, эти слова можно считать синонимами. Слово «snap-in» на русский язык почему-то перевели как «оснастка». По-моему, такой перевод — это вообще пальцем в небо. У меня слово «оснастка» ассоциируется с морскими кораблями, парусниками. Но такой перевод сложился уже давно и все к нему привыкли. Хотя по слову «оснастка» нелегко сообразить, что в английском это «snap-in».

После составления своей «площадки» (консоли) с оснастками эту площадку можно сохранить в файл с расширением «.msc» (аббревиатура «MSC» расшифровывается как «Microsoft Saved Console», по-русски «сохраненная консоль Microsoft»). В дальнейшем этот файл можно поместить на рабочий стол и запускать именно его. Файлы с расширением «.msc» по умолчанию привязаны к программе «mmc.exe» и передаются ей в качестве входного параметра.

Встроенные сохраненные консоли для работы с хранилищами сертификатов

Раньше нужно было создавать свою консоль для оснасток, предназначенных для работы с хранилищами сертификатов. Но в операционной системе «Windows 10» есть встроенные сохраненные консоли с нужными оснастками для работы с хранилищами сертификатов. Поэтому напрямую вызывать программу «mmc.exe» и работать с нею теперь не требуется (если нужно выполнить только манипуляции с сертификатами в хранилищах сертификатов).

Для запуска встроенной в операционную систему сохраненной консоли для работы с хранилищем сертфикатов данного компьютера (локальной машины) можно в строке поиска операционной системы (рядом с кнопкой «Пуск») набрать фразу «Управление сертификатами компьютеров» (у меня операционная система «Windows 10» с русскоязычным интерфейсом; в англоязычном интерфейсе, естественно, нужно будет искать на английском). Поиск найдет ссылку «Открыть» для этой сохраненной консоли, по которой и следует перейти. (Напомню, для работы с хранилищем сертификатов компьютера требуются права администратора.) Вот как окно этой сохраненной консоли выглядит у меня:

Очевидно, что это окно программы «mmc.exe» с загруженной в него сохраненной консолью из файла «certlm.msc». Обратите внимание на заголовок окна с названием файла: certlm (расширение не указано, но оно есть, просто в заголовке окна оно опущено). Окончание «lm» в этом слове расшифровывается как «local machine» (по-русски в этом случае можно перевести как «данный компьютер»). Файл «certlm.msc» расположен в той же папке %windir%\System32\, что и файл «mmc.exe», поэтому его тоже можно вызвать из любого местоположения из командной строки командой «certlm».

Для запуска встроенной в операционную систему сохраненной консоли для работы с хранилищем сертификатов текущего пользователя можно в строке поиска операционной системы (рядом с кнопкой «Пуск») набрать фразу «Управление сертификатами пользователей». Вот как окно этой сохраненной консоли выглядит у меня:

Опять же, это окно программы «mmc.exe» с загруженной в него сохраненной консолью из файла «certmgr.msc». Название «certmgr» расшифровывается как «Certificate Manager» (по-русски «Менеджер сертификатов» или «Диспетчер сертификатов»). Для работы с этой сохраненной консолью не требуется прав администратора операционной системы, достаточно прав текущего пользователя. Опять же, файл «certmgr.msc» хранится в той же папке %windir%\System32\, о которой уже дважды было упомянуто ранее. Его можно запустить из любого местоположения из командной строки с помощью команды «certmgr».

Важно отметить, что сохраненная консоль «certmgr.msc» и программа командной строки «certmgr.exe» — это разные вещи. Не следует их путать.

Ссылки по теме:

https://learn.microsoft.com/en-us/dotnet/framework/wcf/feature-details/working-with-certificates

https://learn.microsoft.com/en-us/dotnet/framework/wcf/feature-details/how-to-view-certificates-with-the-mmc-snap-in

  • Windows 10 пропала регулировка яркости экрана
  • Windows 10 работа с ext3
  • Windows 10 пробная версия что это значит
  • Windows 10 просит пин код которого нет
  • Windows 10 пропала плитка рабочего стола