使用Data Protection API加密web.config文件后出现Null Refernce Exception

时间:2013-09-23 16:05:36

标签: c# asp.net encryption

我已加密了我的网络应用程序的web.config文件的 appSettings connectionStrings 部分。

这些是我在Visual Studio 2010命令提示符下输入的两个命令:

aspnet_regiis.exe -pef "connectionStrings" C:\Provider -prov "DataProtectionConfigurationProvider"

aspnet_regiis.exe -pef "appSettings" C:\Provider -prov "DataProtectionConfigurationProvider"

现在,这两个命令生成了一个新的web.config文件,该文件与解决方案文件一起位于目录中。我打开了这个web.config文件,该文件只包含原始web.config文件的加密appSettings和connectionStrings部分。

然后我打开了我的网络应用程序,删除了原来的 appSettings connectionStrings 部分并粘贴了加密的部分。

这就是我的web.config文件现在的样子:

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
  <appSettings configProtectionProvider="DataProtectionConfigurationProvider">
    <EncryptedData>
      <CipherData>
        <CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAA6h2T0PWsHUC2CPpYvY8QUwQAAAACAAAAAAAQZgAAAAEAACAAAAAdlSIaGrQ1CFjswJi2RxekJ4ZxmRArilsOiqrmUXt6JgAAAAAOgAAAAAIAACAAAACaV/bVjlK60wX9LOFzRsrkbcDjSOT+3Qj0JyUZZszNNSAAAACaQC3oKCPX1gaxZK3ghS6lAMcVwpNpbMpyNpeoiwxap0AAAAD87rr8QUaIQJv2Sc+i+RGWq1+vExAPNjjG1VtWvK4ILsOX88iBRRx0tpAFdNAw0AvGoxUTA7UQGKm7hTHBaAMz</CipherValue>
      </CipherData>
    </EncryptedData>
  </appSettings>
  <connectionStrings configProtectionProvider="DataProtectionConfigurationProvider">
    <EncryptedData>
      <CipherData>
        <CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAA6h2T0PWsHUC2CPpYvY8QUwQAAAACAAAAAAAQZgAAAAEAACAAAAB4Y7QqEGRvo9T04hE8hvd3wMvRXqIMa/UJBkOQnMnsbgAAAAAOgAAAAAIAACAAAADnzwxmuoWUQLYJ0/YPUkgvR/xyXDZNaQI4ZrMmACqvaTAAAAC6C0nEhW+g8WHcNJLN5DRi8uNimkG3GyMEajrB33ST7DN49W925xIeMiN3kvyLAcJAAAAAPcgh+jh6RzsfQElj7/e1RNAQEFQykiqYfLbUEMd+qHcfkLCNwe3tczJQDckGH1cT7Y9At16pPfek1bKZeM7YpQ==</CipherValue>
      </CipherData>
    </EncryptedData>
  </connectionStrings>

  <system.web>
    <compilation debug="true" explicit="true" targetFramework="4.0"/>
    <httpCookies httpOnlyCookies="true" requireSSL="true"/>

    <customErrors mode="On" defaultRedirect="DefaultErrorPage.htm">
      <error statusCode="404" redirect="ErrorPage.htm"/>
    </customErrors>

    <trace enabled="false"/>
  </system.web>
</configuration>

我现在遇到的问题是,当我尝试使用访问web.config文件中的数据的页面(例如连接字符串)时,我得到一个空引用异常。

例如,此行生成空引用异常:

string connection = ConfigurationManager.ConnectionStrings["DB_Connection"].ConnectionString;

我该如何解决这个问题?谢谢:))

澄清

在使用Data Protection API进行加密之前,该生产线运行良好。加密后,空引用异常开始出现。

1 个答案:

答案 0 :(得分:1)

不知道你是否解决了这个问题,但对我来说解决方案是授予对“C:\ Documents and Settings \ All Users \ Application Data \ Microsoft \ Crypto \ RSA \ MachineKeys”中创建的机器密钥文件的读访问权限“到帐户NT AUTHORITY \ NETWORK SERVICE。

NullReferenceException是由应用程序无法读取包含加密/解密密钥的文件引起的。

亲切的问候, 马丁