Я видел здесь связанные вопросы, но они, похоже, не отвечают именно на то, что мне нужно.
Мы используем сценарии Powershell для развертывания наших приложений, а информация, подобная паролям в файлах конфигурации для большинства сред (UAT и т.д.), представлена в виде простого текста. Это не большая проблема, но когда дело доходит до PREPROD и PROD, это большая проблема. Таким образом, у нас были некоторые маркеры в конфиге, такие как "{{promt-password}}", который даст диалоговое окно входа в систему (Get-Credential
), и человек, выполняющий развертывание, может ввести учетные данные, и развертывание продолжается.
Но это не помогает автоматическому развертыванию (что означает развертывание одним кликом с помощью таких инструментов, как TeamCity)
Должен ли я перейти на асимметричное шифрование (http://msdn.microsoft.com/en-us/library/as0w18af.aspx), где пароль зашифрован с использованием открытого ключа, введенного в конфиг, и закрытый ключ сохраняется (как описанный здесь http://msdn.microsoft.com/en-us/library/tswxhw92.aspx) в "агенте" (как в виртуальной машине, где TeamCity инициирует развертывание и имеет ограниченный доступ), выполняющий автоматическое развертывание, и он может расшифровать пароль? Не очень сильный в криптографии и sttuf, но похоже ли это, как идти? Любые другие предложения? Как люди обрабатывают такое автоматическое развертывание?
Update:
Хорошо, я пошел вперед и внедрил его. Я написал Консольное приложение в С#, которое использует библиотеки Crypography. Приложение генерирует ключи:
RSACryptoServiceProvider rsa = GetRsa(containerName);
File.WriteAllText("keys.kez",rsa.ToXmlString(true));
Я также выхожу из открытого ключа:
File.WriteAllText("public.pke", rsa.ToXmlString(false));
Предоставить открытый ключ всем, кто должен зашифровать пароль, и попросить их ввести пароль в конфиге. Поместите файл keys.kez в любой агент, который должен запустить развертывание.