Asp.net 我应该使用RSAProtectedConfigurationProvider还是我自己的提供程序?

Asp.net 我应该使用RSAProtectedConfigurationProvider还是我自己的提供程序?,asp.net,encryption,web-config,rsa,Asp.net,Encryption,Web Config,Rsa,要加密服务器场和单个服务器中两个站点上的web.config节,据我所知,使用以下命令将使用本地计算机密钥加密我的web.config连接字符串 aspnet_regiis.exe-pef“ConnectionString”“C:\website\mywebsite” 但是,我可以使用-pc操作员创建自己的密钥,并使用类似以下内容: <configProtectedData> <providers> <add name="MyProvider"

要加密服务器场和单个服务器中两个站点上的web.config节,据我所知,使用以下命令将使用本地计算机密钥加密我的web.config连接字符串

aspnet_regiis.exe-pef“ConnectionString”“C:\website\mywebsite”

但是,我可以使用-pc操作员创建自己的密钥,并使用类似以下内容:

 <configProtectedData>
  <providers>
     <add name="MyProvider"
          type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0,
                Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a,
                processorArchitecture=MSIL"
          keyContainerName="MyKeys" 
          useMachineContainer="true" />
  </providers>


我不明白的是有什么区别?RSAProtectedConfigurationProvider是否因其使用机器密钥而不安全且无法更改?我应该用我自己的钥匙来换吗?对于服务器场和单个服务器,建议使用哪种解决方案?或者有没有更好的方法来加密这些部分而不必更改或编写任何代码?

对于单个服务器,您可以重用ASP.NET安装的密钥容器,如果我没有弄错的话,它被称为
NetFrameworkConfigurationKey
,您只需确保为运行ASP.NET站点的帐户授予密钥容器的适当权限

对于Web场,最好在计算机中创建自定义密钥容器,然后将其导出到Web场中的所有其他计算机,这样可以重用相同的加密配置文件,从而节省在每个Web场计算机中加密文件的时间但是,这不是强制性的,您可以部署未加密的配置文件,并使用每台机器的ASP.NET默认密钥容器在每台机器中对其进行加密。

另外,这个问题的标题有点误导,当涉及到加密时,您应该始终使用一个完善的库,而不是使用您自己的自定义加密逻辑,这很难也很容易出错


就使用自定义密钥容器或将ASP.NET安装的密钥容器与
RsaProtectedConfigurationProvider
一起重复使用而言,所提供的安全级别没有差异。

对于单个服务器,您可以重复使用ASP.NET安装的密钥容器,如果我没有弄错的话,它被称为
NetFrameworkConfigurationKey
,您只需要确保为运行ASP.NET站点的帐户授予密钥容器的正确权限

对于Web场,最好在计算机中创建自定义密钥容器,然后将其导出到Web场中的所有其他计算机,这样可以重用相同的加密配置文件,从而节省在每个Web场计算机中加密文件的时间但是,这不是强制性的,您可以部署未加密的配置文件,并使用每台机器的ASP.NET默认密钥容器在每台机器中对其进行加密。

另外,这个问题的标题有点误导,当涉及到加密时,您应该始终使用一个完善的库,而不是使用您自己的自定义加密逻辑,这很难也很容易出错


就使用自定义密钥容器或使用ASP.NET与
RsaProtectedConfigurationProvider
一起安装的密钥容器而言,提供的安全级别没有区别。

对于Web服务器场,必须这样做吗?我是否可以将其重新用于服务器场,这会暴露哪些安全问题?@User101,我更新了答案,强调在Web场中部署具有相同密钥的自定义容器不是强制性的。它只是更易于维护。谢谢-我没有使用我自己的自定义逻辑,而是使用NetFrameworkConfigurationKey或创建/导出/导入我自己的密钥。如果没有区别,我会解决与默认的一个易于使用!对于一个Web服务器场来说,必须这样做吗?我可以将其重新用于服务器场吗?这会暴露出什么安全问题?@User101,我更新了答案,强调在整个Web服务器场中部署具有相同密钥的自定义容器不是强制性的。它只是更易于维护。谢谢-我没有使用我自己的自定义逻辑,而是使用NetFrameworkConfigurationKey或创建/导出/导入我自己的密钥。如果没有区别,我会解决与默认的一个易于使用!