其中section是要加密的配置节点(比如“connectionStrings”);physical_directory 为web应用程序根节点的完整物理路径;provider是用到的protected configuration provider的名称(比如“DataProtectionConfigurationProvider”). 另外,如果你将web应用程序在IIS里进行了注册了的话,你就可以用相当路径来代替绝对路径:
aspnet_regiis.exe -pe section -app virtual_directory -prov provider
下面为使用aspnet_regiis.exe的例子,它用DPAPI provider,机器级密匙,对<connectionStrings>节点进行加密:
aspnet_regiis.exe -pef
"connectionStrings" "C:/Websites/ASPNET_Data_Tutorial_73_CS"
-prov "DataProtectionConfigurationProvider"
类似的,该aspnet_regiis.exe命令行工具也可以用来解密配置节点,不过我们要将-pef替换成-pdf或-pd。当然,解密时不需要指定provider名称.
aspnet_regiis.exe -pdf section physical_directory -- or -- aspnet_regiis.exe -pd section -app virtual_directory
注意:由于我们使用的是DPAPI provider,它使用的密匙是又电脑指定的,所以你必须在存储web页面的同一台电脑上运行aspnet_regiis.exe工具. 比如,你在本地电脑上运行这个命令行,然后又将加了密的连接字符串上载到另一个服务器上,该服务器就无法对其进行解密,因为加密的密匙是在本地电脑上指定的.如果是使用RSA provider的话就不存在这种局限性,因为RSA provider可以将密匙(RSA keys)传递给另一台电脑.
理解Database Authentication Options
在任何应用程序向Microsoft SQL Server数据库发出SELECT,INSERT,UPDATE,或DELETE请求之前,数据库首先要确定请求者的身份.该过程可分为2种验证模式:authentication 和 SQL Server provides:
.Windows Authentication:在Visual Studio 2005的ASP.NET Development Server里运行一个ASP.NET应用程序时,ASP.NET应用程序假定身份(identity)为当前登录用户。而如果运行在Microsoft Internet Information Server (IIS)上的话,ASP.NET应用程序假定身份(identity)为domainName/MachineName or domainName/NETWORK SERVICE,,虽然这些都可以用户定制.
.SQL Authentication:验证的时候需要提供用户ID和password,使用SQL authentication的话,可以由连接字符串来提供ID和password.
一般使用Windows authentication模式,因为其更安全.在Windows authentication模式下,连接字符串不需要用户名和密码,并且如果web服务器和数据库服务器分属不同的电脑的话,(credentials)认证在网络间传输时并不以纯文本格式传输.而如果是SQL authentication模式的话,将对连接字符串进行硬编码,且认证在web服务器和数据库服务器之间以纯文本格式进行传输.
本教程使用的是Windows authentication.我们可以通过连接字符串来查看到底使用的是哪种认证。本教程的Web.config文件的连接字符串如下:
Data Source=./SQLEXPRESS; AttachDbFilename=|DataDirectory|/NORTHWND.MDF; Integrated Security=True; User Instance=True
术语“Integrated Security=True”,以及缺少用户名和密码都表明我们使用的是Windows authentication模式。不过在一些连接字符串里用术语“Trusted Connection=Yes” 或 “Integrated Security=SSPI”来替换“Integrated Security=True”, 不过它们都表明使用的是Windows authentication.
下面的代码显示使用的是SQL authentication:
Server=serverName; Database=Northwind; uid=userID; pwd=password
假想某个攻击者可以查看你的应用程序的Web.config文件。如果你使用的是SQL authentication模式通过Internet连接到数据库,攻击者可以利用连接字符串通过SQL Management Studio或他自己网站上的ASP.NET页面连接到你的数据库.为降低风险,我们需要对Web.config文件的连接字符串进行加密.
注意:关于SQL Server里不同认证模式的更多信息应参阅文章《Building Secure ASP.NET Applications: Authentication, Authorization, and Secure Communication》();关于Windows 和 SQL authentication不同之处的更多示例,应参阅ConnectionStrings.com网站.
结语:
默认情况下,ASP.NET应用程序里的所有以.config为后缀的文件都不能通过浏览器访问.这是因为这些文件可能包含了一些敏感信息,比如:数据库连接字符串、用户名和密码等。 .NET 2.0包含的保护配置系统可以通过对指定的配置节点进行加密来加以保护.有2种内置的protected configuration providers:一个使用RSA运算法则,而另一个使用Windows Data Protection API (DPAPI).