2017-06-19 35 views
1

我需要加密服务结构应用程序中settings.xml文件中的某些部分/参数值。我们目前在TFS中建立了一个构建流程来启动构建,并希望在此过程中将这些值加密到生产环境中。我已阅读“在服务结构应用管理的秘密”,并越过步骤加密:使用TFS自动化自动化服务结构中的settings.xml文件的加密构建

  1. 获取数据加密证书
  2. 在集群上安装证书
  3. 加密部署的时候偷偷值应用程序并将其注入到服务的settings.xml配置文件中
  4. 通过解密相同的加密证书,从Settings.xml中读取加密值。

我可以看到我们可以使用MustOverride属性覆盖XML文件中的参数,并为ApplicationManifest.xml文件中的参数提供名称和值。

有谁知道如何或可以将我链接到可以在TFS构建过程中执行此过程的文章?我正在寻找一种单一类型的部署,我们的部署团队(他们都不是程序员)可以使用这种类型的部署将其迁移到生产环境中。我明白必须做什么,我只是没有看到修改我们的服务结构程序和构建以利用此过程所需的步骤。

+0

其打造您使用的是旧的XAML构建或vNext建? –

+0

我们正在使用vNext构建过程。 – john

回答

2

以下是我如何在没有Azure密钥保管库的情况下在Service Fabric中执行加密和解密。由于我们正在加密的数据没有改变,因此决定是使用证书加密这些值并将这些值放入正确的xml文件中。

  1. 生成或获取X509证书。确保KeyUsage具有“DataEncipherment”指示,这对数据加密至关重要
  2. 获取证书的指纹。你可以在你的MMC证书插件中得到这个。
  3. 使用powershell,使用PowerShell中的Invoke-ServiceFabricEncryptedText函数对文本进行加密。使用cert的指纹来加密文本。这将创建包含基本64位字符串的文本的加密,该字符串包含秘密密文以及有关用于加密它的证书的信息。这很关键!此外,使用证书在加密字符串上运行Inoke-ServiceFabricDecryptText方法以确保解密正确是个好主意。
  4. 现在来了一个有趣的部分,以正确的方式将其放入所有的XML文件,以使其发挥作用。 (这是它变得混乱的地方)。
    1. 首先您需要修改settings.xml文件。您想要加密的参数需要设置为IsEncrypted =“true”Value =“”和MustOverride =“true”。
    2. 接下来,您需要在ApplicationManifest.xml文件中声明override参数。确保应用程序清单中的参数名称与settinss中的相同。在applicationmanifest.xml文件的Parameters部分设置参数的名称,并设置value =“”。
    3. 在ConfigurationOverride部分中您引用了参数名称,将该值设置为参数部分中的参数。目前这将是空白的,还设置了IsEncrypted =“true”。
    4. 这是我卡住的地方。所有这些其他信息都很容易获得,下一节没有。接下来,在项目下的ApplicationParameters文件夹中,选择发布到服务结构时使用的XML文件。这是你将放置加密值。在本节中创建一个参数,将名称设置为您在ApplicationManifest中给出的名称,并将该值设置为从证书生成的加密值。

在部署该参数将被传递进来的加密值。要在代码中使用它,你需要确保你引用了DecryptValue。例如:

var decryptedPassword= configurationPackage.Settings.Sections["sectionname"].Parameters["ConnectionString"]>DecryptValue(); 

这将产生一个SecureString的,你可以在你的代码中使用。我使用众多参考之一将该值转换为字符串,以便如何将SecureString转换为可在线使用的字符串。

就是这样。我希望这可以帮助不使用Azure密钥保管库的其他人保护秘密。

约翰