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