キーの配布などがなく、複号化の手間がない方法でapp.configのセクションを暗号化する方法です。
キーの配布をしたくないので、ユーザマシンでインストール時にapp.configを暗号化します。
復号化は自動でやってくれるので、app.configから値を取得するコードは変更しなくても大丈夫です。
app.configのappSettingsセクションとConnectionStringsセクションを暗号化するサンプルです。
1、まずWindowsアプリケーションを作成し、appSettingsセクションとConnectionStringsセクションのあるapp.configを用意します。
<configuration>
<appsettings>
<add key="PASSWORD" value="ABCDEFGHIJKLMN">
</appsettings>
<connectionstrings>
<add connectionstring="user id=username;password=pswd;data source=mydb" name="DB1" providername="System.Data.OracleClient">
</connectionstrings>
…省略…
</configuration>
2、インストーラで実行するカスタム動作を定義したクラスを作成します。
同じソリューションに新しいクラスライブラリのプロジェクトを作成します。
参照設定に「System.Configuration.dll」と「System.Configuration.Install.dll」を追加します。
そして「System.Configuration.Install.Installer」クラスを継承したクラスを作成します。
Imports System.Configuration
<system.componentmodel.runinstaller(true)> _
Public Class Class1
Inherits System.Configuration.Install.Installer
Public Overrides Sub Install(ByVal stateSaver As System.Collections.IDictionary)
MyBase.Install(stateSaver)
Call CryptographyAppConfig()
End Sub
''' <summary>
''' app.configのセクションを暗号化します。
''' </summary>
''' <remarks></remarks>
Private Sub CryptographyAppConfig()
Dim sProtectedProvider As String = "DataProtectionConfigurationProvider"
' インストール先の情報を取得
Dim targetDir As String = Me.Context.Parameters("targetdir")
Dim appNmae As String = Me.Context.Parameters("appname")
'app.config
Dim config As Configuration = ConfigurationManager.OpenExeConfiguration(targetDir + appNmae)
'app.configのセクションを暗号化
Dim sec1 As ConfigurationSection = config.GetSection("appSettings")
sec1.SectionInformation.ProtectSection(sProtectedProvider)
sec1.SectionInformation.ForceSave = True
Dim sec2 As ConfigurationSection = config.GetSection("connectionStrings")
sec2.SectionInformation.ProtectSection(sProtectedProvider)
sec2.SectionInformation.ForceSave = True
config.Save(ConfigurationSaveMode.Full)
End Sub
End Class
3、セットアッププロジェクトを作成します。
同じソリューションにセットアッププロジェクトを追加し、アプリケーションフォルダに
1で作成したWindowsアプリケーションのプライマリ出力
2で作成したクラスライブラリのプリマり出力を追加します。
次にセットアッププロジェクトの「カスタム動作エディタ」を開き「インストール」ノードを右クリック「カスタム動作の追加」を選択します。
「アプリケーションフォルダ」からクラスライブラリのプリマり出力を選択します。
追加したカスタム動作のCustomActionDataプロパティに
/targetdir="[TARGETDIR]/" /appname="WindowsApplication2.exe"を設定します。
※appnameは1で作成したWindowsアプリケーションのexeを指定してください。
以上で設定は終了です。
作成したセットアッププロジェクトでインストールを実行すると、app.configが暗号化されています。