http://halr9000.com/article/531
ел похожие вопросы здесь, но они, кажется, не отвечают точно, что мне нужно.
Мы используем сценарии 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 в любой агент, который должен запустить развертывание.