web-dev-qa-db-ja.com

プロバイダー「RsaProtectedConfigurationProvider」を使用して復号化に失敗しましたか?

私のWindowsアプリケーションで、app.configファイルの接続文字列セクションを暗号化しようとしています。app.configファイルの接続文字列部分は

<connectionStrings>
<add name="SQLiteDB" connectionString="Data Source=|DataDirectory|database.s3db;    
Version=3;password=mypassword;" providerName="System.Data.Sqlite"/>
</connectionStrings>

そして.csファイルで私はそれを次のように暗号化しています

Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
ConfigurationSection section = config.GetSection("connectionStrings") as ConnectionStringsSection; // could be any section

if (!section.IsReadOnly())
{
 section.SectionInformation.ProtectSection("RsaProtectedConfigurationProvider");
 section.SectionInformation.ForceSave = true;
 config.Save(ConfigurationSaveMode.Full);
}

このコードを実行した後、別のapp.configで暗号化された接続文字列を取得します。このapp.configはbin\debugフォルダーにあり、この.configファイルの名前はnameofapplication.exe.configです。

問題は、このアプリケーションをセットアップして他のマシンで実行すると、次のようなエラーが発生する場合です。

System.Configuration.ConfigurationErrorsException: Failed to decrypt using provider 'RsaProtectedConfigurationProvider'. Error message from the provider: The RSA key container could not be opened.

私は初めてそれをしているので、これを解決する方法がわからず、ひどく立ち往生しています。

7
Mogli

App.configファイルは、ローカルマシンの証明書を使用して暗号化されています。この証明書は他のマシンには存在しません。したがって、app.configファイルを復号化することはできません。

これを機能させるには、自分のマシンで暗号化キーをエクスポートしてから、他のマシンにインポートする必要があります。次の記事は、その方法を示しています。チュートリアル: RSAキーコンテナの作成とエクスポート

7

このコマンドの使用aspnet_regiis -pa

Cmdコンソールを開きます-管理者として実行します-

C:\Windows\system32>aspnet_regiis -pa "NetFrameworkConfigurationKey" "myDomain\myUser"
Microsoft (R) ASP.NET RegIIS versión 4.0.30319.33440
Utilidad de administración que instala y desinstala ASP.NET en el equipo local.
Copyright (C) Microsoft Corporation. Todos los derechos reservados.
Agregando ACL para el acceso al contenedor de claves RSA...
Con éxito

その他の参考資料:

ƉiamondǤeezeƦanswer

アプリケーション構成ファイルの暗号化時にRsaProtectedConfigurationProviderが失敗することがあります

ASP.NET暗号化-aspnet_regiis-ファーム

。NET 4.0のWeb.configセクションの暗号化と復号化

8
Kiquenet