Поиск связанного закрытого ключа для SSL/TLS сертификата с использованием PowerShell

Вопрос или проблема

При импорте нового сертификата (.pfx с паролем) на сервере Windows (2022) с .net framework 4.8 с использованием PowerShell с удаленного устройства возникает проблема добавления пользователей, которые могут управлять закрытым ключом сертификата. Существует ли способ найти закрытый ключ или его физическое местоположение через PowerShell и связанные с сертификатом свойства? Или возможен обходной путь добавления пользователей в управляющие сущности всех закрытых ключей, связанных с сертификатом?

При использовании интерфейса на целевом сервере Windows можно добавлять пользователей/группы для управления закрытыми ключами, например:
пример интерфейса управления пользователями

При попытке воспроизвести то же самое действие, используя сценарии PowerShell

$acl = Get-Acl $keyFile.FullName

            $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($adServiceAccount, "Read", "Allow")

            $acl.SetAccessRule($accessRule)

            Set-Acl -Path $keyFile.FullName -AclObject $acl

закрытый ключ становится необходимым для использования ACL для добавления нового правила (с новым пользователем) Но здесь проявляется проблема недоступного закрытого ключа данного сертификата. Свойства подтверждают, что у сертификата есть ключ:
вставьте описание изображения здесь
Получено через

$cert = Get-ChildItem Cert:\LocalMachine\My | *'фильтр по отпечатку...'*
$cert.HasPrivateKey (<-- свойство возвращает true, что подтверждает наличие ключа)
$privateKey = $cert.PrivateKey (<-- все свойства возвращают пустые значения)

Ответ или решение

Чтобы управлять приватным ключом SSL/TLS сертификата на Windows Server 2022 с использованием PowerShell, необходимо понимать, что приватный ключ хранится в защищенном хранилище ключей Windows, и к нему не может быть доступа напрямую. Вместо этого вы можете управлять правами доступа к этому ключу через специальный механизм ACL (Access Control List). Давайте рассмотрим, как это сделать.

Шаги для добавления пользователей к управлению приватным ключом:

  1. Получите сертификат: Используйте команду PowerShell для поиска вашего сертификата по отпечатку (thumbprint).

    $cert = Get-ChildItem Cert:\LocalMachine\My | Where-Object { $_.Thumbprint -eq 'ваш-отпечаток' }
  2. Проверьте наличие приватного ключа: Убедитесь, что у вас есть доступ к приватному ключу. Если HasPrivateKey возвращает True, это означает, что ключ существует.

    if ($cert.HasPrivateKey) {
        Write-Host "Приватный ключ присутствует."
    }
  3. Получите доступ к приватному ключу: Сделайте это с использованием объекта CspKeyContainerInfo. Это позволит вам работать с ACL для приватного ключа.

    $privateKey = $cert.PrivateKey
    $csppki = $privateKey.CspKeyContainerInfo
  4. Настройте права доступа: Используя SetAccessRule, вы можете добавить нужных пользователей или группы к правам доступа к приватному ключу. Однако для этого необходимо создать новый объект доступа.

    $keySecurity = $csppki.GetKeySecurity()
    
    $accessRule = New-Object System.Security.AccessControl.CryptoKeyAccessRule("DOMAIN\пользователь", "Read", "Allow")
    $keySecurity.AddAccessRule($accessRule)
    
    $csppki.SetKeySecurity($keySecurity)
  5. Обратите внимание на наличие прав: Убедитесь, что ваша учетная запись или скрипт PowerShell, от имени которого вы выполняете команды, имеет необходимые права для модификации ACL.

Устранение проблем:

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

  1. Запустите PowerShell от имени администратора, чтобы убедиться, что у вас есть все необходимые привилегии.
  2. Если вы настраиваете доступ для других пользователей, убедитесь, что вычислительные машины соответствуют политикам безопасности.
  3. Вы можете использовать утилиты, такие как CertUtil, для проверки прав доступа к ключам:

    certutil -key -user

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

Заключение:

Управление правами доступа к приватному ключу SSL/TLS сертификата на Windows Server через PowerShell требует понимания структуры безопасности и использования правильных методов для изменения ACL. Приведенные выше шаги помогут вам правильно настроить доступ и выполнить необходимые необходимые операции с сертификатами и ключами.

Оцените материал
Добавить комментарий

Капча загружается...