PowerShell DSC. Сертификат для шифрования пароля

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

PowerShell Desired State Configuration

PowerShell Desired State Configuration

Невалидный сертификат

Если сертификат не удовлетворяет требованиям для шифрования пароля, то при попытке скомпилировать конфигурацию получаем примерно такое исключение:

ConvertTo-MOFInstance : System.ArgumentException error processing property 'Password' OF TYPE 'MSFT_Credential': Certificate 
'4B73573487D6017136355FAA9A2AF7F9B59A16F8' cannot be used for encryption. Encryption certificates must contain the Data Encipherment 
or Key Encipherment key usage, and include the Document Encryption Enhanced Key Usage (1.3.6.1.4.1.311.80.1).
At C:\Windows\system32\WindowsPowerShell\v1.0\Modules\PSDesiredStateConfiguration\PSDesiredStateConfiguration.psm1:303 char:13
    +             ConvertTo-MOFInstance MSFT_Credential $newValue
    +             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Write-Error], InvalidOperationException
    + FullyQualifiedErrorId : FailToProcessProperty,ConvertTo-MOFInstance

Генерация сертификата

Для запроса сертификата можно использовать Certreq, который в качестве входного параметра принимает файл-запрос. Для PowerShell DSC достаточно примерно такого запроса:

[Version]
Signature = "$Windows NT$"

[Strings]
szOID_ENHANCED_KEY_USAGE = "2.5.29.37"
szOID_DOCUMENT_ENCRYPTION = "1.3.6.1.4.1.311.80.1"

[NewRequest]
Subject = "CN=COMPUTER_NAME"
KeyLength = 2048
MachineKeySet = true
RequestType = Cert
KeySpec = AT_KEYEXCHANGE
KeyUsage = CERT_KEY_ENCIPHERMENT_KEY_USAGE

[Extensions]
%szOID_ENHANCED_KEY_USAGE% = "{text}%szOID_DOCUMENT_ENCRYPTION%"

Теперь простой PowerShell генерирует сертификат:

certreq -new PathCertificateToRequest.inf PathToCertificate.cer

Полученный файл можно использовать для шифрования пароля в PowerShell DSC.

Конфигурация

Указанный сертификат необходимо указать в конфигурации Local Configuration Manager для каждого сервера, где это применимо. В противном случае получаем исключение при, например, вызове Start-DscConfiguration:

The Local Configuration Manager is not configured with a certificate.

Чтобы указать сертификат, который необходимо использовать, достаточно добавить блок LocalConfigurationManager в конфигурацию. Примерно так:

Configuration CertConfigurationDemo {
    param(
        [Parameter(Mandatory=$true)] [ValidateNotNullorEmpty()] [PSCredential] $InstallAccount
    )
 
    Node SP2016SRV
    {
        <strong>LocalConfigurationManager {</strong>
            <strong>CertificateID = $Node.Thumbprint</strong>
        <strong>}</strong>
        #Someting resource using #InstallAccount
    }
}
$ConfigData = @{
    AllNodes = @(
        @{
            NodeName = 'SP2016SRV'
            CertificateFile = 'C:\sp\localhost.cer'
            Thumbprint = '‎35024c5060014373e768b900b762f6793c5575d9'
            PSDscAllowDomainUser = $true
        }
    )
}

Ссылки

Немного полезных ссылок по теме:

Use a certificate with PowerShell DSC to add a server to Active Directory without hard coding a password - этот способ у меня не сработал.

Encryption certificates must contain Data Encipherment or Key Encipherment

Пользуемся.

Виталий Жуков

Виталий Жуков

SharePoint архитектор, разработчик, тренер, Microsoft MVP (Office Development). Более 15 лет опыта работы с SharePoint, Dynamics CRM, Office 365, и другими продуктами и сервисами Microsoft.

Смотрите также

SharePoint 2007. Проверка на наличие элемента в списке

SharePoint 2007. Проверка на наличие элемента в списке

SharePoint 2007. База данных содержимого

SharePoint 2007. База данных содержимого

SharePoint 2007. Свой контрол на панели свойств веб-парта

SharePoint 2007. Свой контрол на панели свойств веб-парта

SharePoint 2007. Максимальное/минимальное значение поля в списке

SharePoint 2007. Максимальное/минимальное значение поля в списке

SharePoint 2007. Получение данных из нескольких списков и узлов

SharePoint 2007. Получение данных из нескольких списков и узлов