0

我正在尝试在我的 web.config 中加密连接字符串。我遵循了微软的指导方针,但它不起作用。http://msdn.microsoft.com/en-us/library/ff650304.aspx#paght000006_step3

在我得到“加密配置部分成功!”之后 在命令提示符下。我从 web.config 中删除了“connectionStrings”部分,并将新添加的“connectionStrings”与加密数据一起保存。

我有两个用于 Entity Framework 的 MSSQL 数据库连接字符串,但在运行时编译时出现错误,提示“在配置中找不到指定的命名连接,不打算与 EntityClient 提供程序一起使用,或者无效。

当您打开模型 edmx 文件并从数据库更新模型时。Visual Studio 显示错误消息“无法使用提供程序 RSAProtectedConfigurationProvider 解密......无法打开 RSA 密钥容器。”

    <connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider">
      <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>..........</CipherValue>
            </CipherData>
          </EncryptedKey>
        </KeyInfo>
        <CipherData>
          <CipherValue>........</CipherValue>
        </CipherData>
      </EncryptedData>
    </connectionStrings>

-------- 解决了,下面回答。------

4

3 回答 3

2

看起来创建密钥的帐户与运行应用程序的帐户不同。您是否确保适当的帐户可以访问密钥存储?从你发的那篇文章...

授予对 ASP.NET 应用程序标识的访问权 a.如果您不确定要使用哪个标识,请使用以下代码从网页中检查标识:

using System.Security.Principal;

protected void Page_Load(object sender, EventArgs e)
{
    Response.Write(WindowsIdentity.GetCurrent().Name);
}

默认情况下,Windows Server 2003 上的 ASP.NET 应用程序使用 NT Authority\Network Service 帐户运行。打开 .NET 命令提示符,并使用以下命令授予此帐户对 NetFrameworkConfigurationKey 存储的访问权限:aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT Authority\Network Service"

如果命令成功运行,您将看到以下输出:添加 ACL 以访问 RSA 密钥容器...成功!

您可以在以下文件夹中检查文件的 ACL:

\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys

您的 RSA 密钥容器文件是此文件夹中具有最新时间戳的文件。

此外,这些简单的命令似乎适用于 EF/Linq-to-Entities

于 2012-05-24T18:24:17.897 回答
0

当你运行 aspnet 命令时,加密的数据应该替换“connectionStrings”,如果没有,那么它就失败了。aspnet_regiis -pe "connectionStrings" -app "/" -location "子文件夹" -site "2"

我运行了该命令,但事实证明我不需要 -location 并且这是不正确的。

我应该知道,当密码值 XML 字段如此小时。

但是,这两个命令可以解决问题...

aspnet_regiis -pe "connectionStrings" -app "/" -site "2"

aspnet_regiis -pa "NetFrameworkConfigurationKey" "IIS APPPOOL\MyApp"

于 2012-05-24T18:42:38.123 回答
-1

在发布项目的服务器上运行此代码

string provider = "RSAProtectedConfigurationProvider";
string section = "connectionStrings";

protected void Page_Load(object sender, EventArgs e)
{

}
protected void btnEncrypt_Click(object sender, EventArgs e)
{
   Configuration confg = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
   ConfigurationSection configSect = confg.GetSection(section);
   if (configSect != null)
   {
      configSect.SectionInformation.ProtectSection(provider);
      confg.Save();
   }
}

protected void btnDecrypt_Click(object sender, EventArgs e)
{
   Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
   ConfigurationSection configSect = config.GetSection(section);
   if (configSect.SectionInformation.IsProtected)
   {
      configSect.SectionInformation.UnprotectSection();
      config.Save();
   }
}

在此链接中:http: //www.codeproject.com/Tips/304638/Encrypt-or-Decrypt-Connection-Strings-in-web-confi

<connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider">
<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>WagJ9DDjWTNc1nmYVNQXaQqXalQzXaiCHAOtUJvTWBRZiuT6UK1fBElM80PnL6dC5Umb8qvfHdkSMgoMW9CJzwOTZ0zTy17JBGZqRQmlfW2G9LacoWIil0UrxjhgmJmRXhwXHFpdGwEVl7AoQGVlJGabXuChutaTxmfGOoUbCr0=</CipherValue>
</CipherData>
</EncryptedKey>
</KeyInfo>
<CipherData>
<CipherValue>qry5qnr3qxOgyoNPeP7OKEiHpr/PPTsaeQ2mYUsSK7cg4Kkl9uPO4RyUXgBIkgCTsjbObqLlyndcSBnYyek6bxG/IBL82G1R5J1ci8i1eyt8kIDqouzYOx5vtouErld4z1L+7WGf9Wg37QAH5RiiEfkCHndJJq3dTqjxnnXZSno6NgbxSXDfqzwE/eKDVhGV3oaTQSfjVmO8e5a9wvREYeeyasDhojx8J2mdy7/Q9rEIpv98RTiRxA==</CipherValue>
</CipherData>
</EncryptedData>
</connectionStrings>    
于 2012-12-30T05:45:10.727 回答