Вопрос или проблема
При импорте нового сертификата (.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). Давайте рассмотрим, как это сделать.
Шаги для добавления пользователей к управлению приватным ключом:
-
Получите сертификат: Используйте команду PowerShell для поиска вашего сертификата по отпечатку (thumbprint).
$cert = Get-ChildItem Cert:\LocalMachine\My | Where-Object { $_.Thumbprint -eq 'ваш-отпечаток' }
-
Проверьте наличие приватного ключа: Убедитесь, что у вас есть доступ к приватному ключу. Если
HasPrivateKey
возвращаетTrue
, это означает, что ключ существует.if ($cert.HasPrivateKey) { Write-Host "Приватный ключ присутствует." }
-
Получите доступ к приватному ключу: Сделайте это с использованием объекта
CspKeyContainerInfo
. Это позволит вам работать с ACL для приватного ключа.$privateKey = $cert.PrivateKey $csppki = $privateKey.CspKeyContainerInfo
-
Настройте права доступа: Используя
SetAccessRule
, вы можете добавить нужных пользователей или группы к правам доступа к приватному ключу. Однако для этого необходимо создать новый объект доступа.$keySecurity = $csppki.GetKeySecurity() $accessRule = New-Object System.Security.AccessControl.CryptoKeyAccessRule("DOMAIN\пользователь", "Read", "Allow") $keySecurity.AddAccessRule($accessRule) $csppki.SetKeySecurity($keySecurity)
-
Обратите внимание на наличие прав: Убедитесь, что ваша учетная запись или скрипт PowerShell, от имени которого вы выполняете команды, имеет необходимые права для модификации ACL.
Устранение проблем:
Если при попытке получить значения приватного ключа вы получаете пустые значения, это может указывать на отсутствие достаточных прав доступа к этому ключу. Убедитесь, что ваша учетная запись управления имеет права на чтение приватного ключа:
- Запустите PowerShell от имени администратора, чтобы убедиться, что у вас есть все необходимые привилегии.
- Если вы настраиваете доступ для других пользователей, убедитесь, что вычислительные машины соответствуют политикам безопасности.
-
Вы можете использовать утилиты, такие как CertUtil, для проверки прав доступа к ключам:
certutil -key -user
Это должно предоставить вам информацию о текущих правилах доступа для ваших приватных ключей.
Заключение:
Управление правами доступа к приватному ключу SSL/TLS сертификата на Windows Server через PowerShell требует понимания структуры безопасности и использования правильных методов для изменения ACL. Приведенные выше шаги помогут вам правильно настроить доступ и выполнить необходимые необходимые операции с сертификатами и ключами.