CryptoKeySecurity возвращает ноль - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь изменить правила доступа для конкретного $cert с помощью следующего кода:

$csp = New-Object System.Security.Cryptography.CspParameters (
    $cert.PrivateKey.CspKeyContainerInfo.ProviderType, 
    $cert.PrivateKey.CspKeyContainerInfo.ProviderName, 
    $cert.PrivateKey.CspKeyContainerInfo.KeyContainerName)

$csp.Flags = [System.Security.Cryptography.CspProviderFlags]::UseExistingKey -bor [System.Security.Cryptography.CspProviderFlags]::UseMachineKeyStore
$csp.CryptoKeySecurity = $cert.PrivateKey.CspKeyContainerInfo.CryptoKeySecurity
$csp.KeyNumber = $cert.PrivateKey.CspKeyContainerInfo.KeyNumber

$access = New-Object System.Security.AccessControl.CryptoKeyAccessRule (
    $identity, 
    [System.Security.AccessControl.CryptoKeyRights]::GenericRead, 
    [System.Security.AccessControl.AccessControlType]::Allow)

$csp.CryptoKeySecurity.AddAccessRule($access)

Но в последней строке выдается исключение, потому что $csp.CryptoKeySecurity равно нулю. Во время отладки оказалось, что $cert.PrivateKey.CspKeyContainerInfo.CryptoKeySecurity также является нулевым. Однако самое сложное в том, что это происходит только на 1 из 5 машин, не зависит ни от версии ОС, ни от версии PS, происходит только в нашей среде, почему ...? К вашему сведению $cert.PrivateKey не является нулевым, ни $cert.PrivateKey.CspKeyContainerInfo.

1 Ответ

0 голосов
/ 17 сентября 2018

В итоге проблема заключалась в разных настройках параметров безопасности в нашей производственной среде. На моей машине значение Manage auditing and security log было установлено на Administrators, в то время как на сервере все было иначе, только наши сотрудники OPS. Об этом узнали после переписывания кода в C #, который выдает исключение, в отличие от PS, который просто молча возвращает ноль.

Процесс не обладает привилегией SeSecurityPrivilege, необходимой для этой операции.

Чтобы узнать, как обойти эту проблему, см. этот вопрос SO .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...