日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

配置错误:未能使用提供程序“RsaProtectedConfigurationProvider”进行解密。提供程序返回错误信息为: 打不开 RSA 密钥容器。...

發布時間:2024/8/24 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 配置错误:未能使用提供程序“RsaProtectedConfigurationProvider”进行解密。提供程序返回错误信息为: 打不开 RSA 密钥容器。... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://www.cnblogs.com/jiaruistone/articles/1441634.html

?

在asp.net2.0中新增了對web.config中的部分數據進行加密的功能,可以使用RSAProtectedConfigurationProvider和DPAPIProtectedConfigurationProvider來加密,本文說明使用RSAProtectedConfigurationProvidert和計算機級別的密鑰容器進行加密的步驟。 1. ?????????首先確定要進行加密的web.config中的配置節是否可以加密 2. ?????????創建RSA密鑰容器 3. ?????????在web.config中標識要使用的密鑰容器 4. ?????????對web.config進行加密 5. ?????????授予對 RSA 密鑰容器的訪問權限

?

我們如果想對web.config的數據庫連接字符串進行加密的話,那么這里提供了兩個方法。?

方法一、?
? ? 使用“DataProtectionConfigurationProvider”形式加密,創建test.aspx文件,代碼如下:?
需要添加引用?
using System.Web.Configuration;?
using System.IO;?

//加密?
protected void Button1_Click(object sender, EventArgs e)?
? ? {?
? ? ? ? Configuration config =? WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);?
? ? ? ? ConfigurationSection section = config.GetSection("connectionStrings");?
? ? ? ??
? ? ? ? if (section != null && !section.SectionInformation.IsProtected)?
? ? ? ? {?
? ? ? ? ? ? section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");?
? ? ? ? ? ? config.Save();?
? ? ? ? }?

? ? }?
//解密?
? ? protected void Button2_Click(object sender, EventArgs e)?
? ? {?
? ? ? ? Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);?
? ? ? ? ConfigurationSection section = config.GetSection("connectionStrings");?

? ? ? ? if (section != null && section.SectionInformation.IsProtected)?
? ? ? ? {?
? ? ? ? ? ? section.SectionInformation.UnprotectSection();?
? ? ? ? ? ? config.Save();?
? ? ? ? }?
? ? }?


總結:此方法很方便,并且很簡單,但安全性沒有密鑰加密高。?

?

方法二、?
使用“RSAProtectedConfigurationProvider”形式來加密?
1.test.aspx程序文件基本如上,?
把?
section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");?
改成?
section.SectionInformation.ProtectSection("RSAProtectedConfigurationProvider");?
但這個時候你訪問網站的時候很有可能會出現?

2.aspnet_regiis -pe "connectionStrings" -app "/SampleApplication" -prov "RsaProtectedConfigurationProvider"

說明: 在處理向該請求提供服務所需的配置文件時出錯。請檢查下面的特定錯誤詳細信息并適當地修改配置文件。?
分析器錯誤信息: 未能使用提供程序“RsaProtectedConfigurationProvider”進行解密。提供程序返回錯誤信息為: 打不開 RSA 密鑰容器。?

這樣的錯誤,解決方法是:?


進dos運行:aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITY\NETWORK SERVICE"?
? 如果運行出錯,需要把目錄 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 放入環境變量path中。?
? 此時就可以成功訪問網站了。?
? 同樣可以通過命令行來實現“RSAProtectedConfigurationProvider”加密 (若要使用計算機配置中指定的默認 RsaProtectedConfigurationProvider,必須首先向應用程序的 Windows 標識授予對名為 NetFrameworkConfigurationKey 的計算機密鑰容器的訪問權限,該計算機密鑰容器是為該默認提供程序指定的密鑰容器。)
??aspnet_regiis -pe "connectionStrings" -app "/SampleApplication" -prov "RsaProtectedConfigurationProvider"


? 注意:你也可以不運行 aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITY\NETWORK SERVICE"命令來注冊默認的 RsaProtectedConfigurationProvider 的RSA 密鑰容器?
? ? ? ?

方法如下:?
? ? ? ? 1)創建一個可導出的rsa密鑰容器,命名為Key?

aspnet_regiis -pc "Key" -exp?


2)在你要加密的信息前面指定密鑰容器,如:?

<configProtectedData>?

? ? ? ? <providers>?

? ? ? ? ? ? <clear />?

? ? ? ? ? ? <add name="KeyProvider"?

     ? type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0,Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"?

     ? keyContainerName="Key"?

     ? useMachineContainer="true"/>?

? ? ? ? </providers>?

</configProtectedData>?


<connectionStrings>?

? ? ? ? <add name="SQLConnString" connectionString="Data Source=yourIP;Initial Catalog=test;User Id=yourID;Password=yourPassword;"?

? ? ? ? providerName="System.Data.SqlClient" />?


</connectionStrings>?

并且確保在configuration節的xmlns屬性有如下值:?

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">?


3)對配置文件進行加密?

aspnet_regiis -pef "connectionStrings" "E:\project\Test" -prov "KeyProvider"?

參數分別為:需要加密的配置節、項目所在目錄的物理路徑、加密所使用的密鑰容器名稱?

再看web.config文件,就會發現connectionStrings節已經被加密了,但是運行程序會發現程序仍然可以正確訪問數據庫。?

此時,只需運行:?

aspnet_regiis -pdf "connectionStrings" "E:\project\Test"?

就可以對web.config文件進行解密。?

(注意,如果還是有錯誤,那可能是您沒有給生成的密匙文件足夠的權限,去到 C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys 目錄下,?
? 找到剛生成的密匙文件,把network service用戶的讀取權限賦予給它,就可以了,直接用命令的話也可以:命令如下 aspnet_regiis -pa "Key" "NT AUTHORITY\NETWORK SERVICE" ,可能需要重新啟動iis)?


4)把密鑰容器導出為xml文件?

aspnet_regiis -px "Key" "e:\Key.xml"?

這個命令只導出公鑰,因此以后只能用于加密,而無法解密。?

aspnet_regiis -px "Key" "e:\Keys.xml" -pri?

這個則連私鑰一起導出了,所以我們要用這個。?


5)把密鑰容器刪除?

aspnet_regiis -pz "Key"?

刪除后再運行程序,會提示出錯:?

分析器錯誤信息: 未能使用提供程序“KeyProvider”進行解密。提供程序返回錯誤信息為: 打不開 RSA 密鑰容器。?

同理可以證明,在任何一臺未安裝正確的密鑰容器Key的機器上,程序都無法對connectionStrings節進行解密,因此也就無法正常運行。?


6)導入key.xml文件?

aspnet_regiis -pi "Key" "e:\Keys.xml"?

此時,再運行程序會發現又可以解密了。證明加密與解密機制運行正常。?


最后說一下這個機制所提供的安全性保障可以運用在什么方面:?

對winform程序的app.config進行加密實際意義并不大,因為無論如何,客戶機都可以通過運行aspnet_regiis -pdf 來對配置文件進行解密,從而暴露敏感信息。?

對于web.config進行加密的意義也僅限于,當web.config文件不小心泄露時,不會同時泄露敏感信息,如果惡意攻擊者已經取得了在服務器上運行程序的權限,那么同app.config一樣,可以很容易通過通過運行aspnet_regiis -pdf 獲取明文了。?


還有,通過aspnet_regiis -pa "Key" "NT AUTHORITY\NETWORK SERVICE"控制對不同用戶對密鑰容器的訪問權限,應該還可以進一步獲取一些安全性,比如可以控制某些用戶即使登錄到服務器上,也無法用aspnet_regiis -pdf對配置文件進行解密。

轉載于:https://www.cnblogs.com/randomize/p/4533940.html

總結

以上是生活随笔為你收集整理的配置错误:未能使用提供程序“RsaProtectedConfigurationProvider”进行解密。提供程序返回错误信息为: 打不开 RSA 密钥容器。...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。