Назад | Перейти на главную страницу

Powershell DSC использует неправильный файл сертификата для шифрования, где имена узлов частично совпадают?

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

Конфигурация DSC использует неправильный файл CertificateFile из коллекции AllNodes, если имя узла содержится в последующем имени узла (важен порядок узлов). Это означает, что зашифрованное значение, отправленное на узел, может быть неправильным.

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

$password = ConvertTo-SecureString "password" -AsPlainText -Force
$serviceCredential = New-Object System.Management.Automation.PSCredential ("username", $password)
$currentPath = Split-Path -Parent $MyInvocation.MyCommand.Definition

$thisShouldNotWork = @{
    AllNodes = @(
        @{
            NodeName = "web1"
            CertificateFile = "nonexistentfile"
        },

       @{
            NodeName = "customerweb1"
            CertificateFile = "$currentPath\mycert.cer"
        }
    );
}

$thisDoesNotWork = @{
    AllNodes = @(
        @{
            NodeName = "web1"
            CertificateFile = "nonexistentfile"
        },

       @{
            NodeName = "customerweXb1"
            CertificateFile = "$currentPath\mycert.cer"
        }
    );
}

Configuration DscWebServer
{
  Node $AllNodes.NodeName
  {
    Service "Service Started"
    {
      Name = "MyService"
      State = "Running"
      Credential = $serviceCredential
    }
  }
}

Write-Host "Test 1" -ForegroundColor Blue -BackgroundColor White
DscWebServer -OutputPath .\DSC -ConfigurationData $thisShouldNotWork
Write-Host "Test 2" -ForegroundColor Blue -BackgroundColor White
DscWebServer -OutputPath .\DSC -ConfigurationData $thisDoesNotWork

Я сообщил об этом Подключить но хотел поднять его здесь, на случай, если это поможет или что-то необычное в том, что я сделал. Кто-нибудь может объяснить такое поведение?

ОБНОВЛЕНИЕ: Microsoft подтвердила это как ошибку и исправила ее в мае 2015 года. Я получил такой отзыв: «Эта проблема была исправлена ​​в апрельской предварительной версии WMF5. Пожалуйста, дайте нам знать, если вы не согласны :)»

Это интересно. Можете ли вы подтвердить результаты каждого теста? Действительно ли Тест 2 вызывает исключение?

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

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

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

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

foreach($node in $thisShouldNotWork.AllNodes) {
    DscWebServer -OutputPath .\DSC -ConfigurationData @{AllNodes = @($node)}
}

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