8

我有一个 Web 应用程序,我使用“发布”选项将其发布到三个 Web 服务器。

我想加密 web 配置文件的连接字符串部分。下面的命令将执行此操作:

c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pef "connectionStrings" c:\inetpub\application

但是,我必须对每台服务器进行 RDP(远程桌面)并在每台服务器上运行命令,因为您不能像这样(从客户端 PC)运行它:

\servername\c$\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pef "connectionStrings" \servername\c$\inetpub\application

有没有更好的方法来做到这一点:也许:

1) 发布后在服务器上执行命令行 2) 在 Visual Studio 中使用构建选项,允许您在发布完成后执行批处理文件

4

3 回答 3

5

加密服务器上 web.config 的 connectionStrings 部分,然后将此加密部分添加到 web.[CONFIGURATION_FOR_SERVER].config 转换文件。密钥是第一行,它表示用这个新的加密值替换原始 web.config 的 connectionStrings 部分。对于要发布到的每个服务器,您都需要一个新的转换文件。Visual Studio 将引发警告(不是错误),即

Warning 15  The element 'connectionStrings' has invalid child element 'EncryptedData' in namespace 'http://www.w3.org/2001/04/xmlenc#'. List of possible elements expected: 'add, remove, clear'.   C:\DevTFS\YourProject\Web.Stage.config  14  6   YourProject

关于这个转换文件的格式——我还没有找到正确的语法来解决这个问题,所以我愿意接受建议,但它仍然有效,所以我很高兴。关于此的完整博客条目:http ://randomdotnetnuggets.blogspot.com.au/2013/05/publishing-encrypted-connection-strings.html

<connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider" xdt:Transform="Replace">
<EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
  xmlns="http://www.w3.org/2001/04/xmlenc#">
  <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
  <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
    <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
      <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
      <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
        <KeyName>Rsa Key</KeyName>
      </KeyInfo>
      <CipherData>          
         <CipherValue>t8p7aOZTjMo...zE6FAAI=</CipherValue>
      </CipherData>
    </EncryptedKey>
  </KeyInfo>
  <CipherData>
    <CipherValue>Vy1TZWY8....ic+Qg6T7U</CipherValue>
  </CipherData>
</EncryptedData>

于 2013-05-24T05:08:27.660 回答
1

如果无法选择集成安全性,我建议您使用MS Web Deploy

使用 Visual Studio 2012构建部署包时,您将获得一个 zip 文件和命令行脚本文件。您可以修改该脚本文件以加密您的 web.config 或滚动您自己的批处理脚本或 powershell 脚本。

于 2013-02-18T06:42:20.057 回答
1

这是一个老问题,但这个答案可能会对某人有所帮助。

在负载平衡或 Web 场方案中,您可以加密文件一次并将 web.config 复制到其他计算机。但是,要使其正常工作,您必须为每个网站使用相同的机器密钥。

https://msdn.microsoft.com/en-us/library/dtkwfdky.aspx

希望这可以帮助任何搜索这个的人。

于 2015-11-10T14:19:59.223 回答