WebとWinFormsアプリの間で共通のデータベースコードを使用しています。web.configファイルとapp.configファイルの接続文字列セクションを暗号化する方法を調査して解決しました。その部分は大丈夫です。また、AzureWebアプリで接続文字列を復号化する方法も検討しました。これで問題ありません。.pfxファイルをマシンの証明書ストアにロードした後にWinFormsアプリで接続文字列を読み取ることもできますが、再起動した後、pfxファイルに秘密鍵が見つからないため失敗します。
次のコマンドで作成された証明書を使用しています。
makecert -r -pe -n "CN = myconfig" -sky exchange "myconfig.cer" -sv "myconfig.pvk"
pvk2pfx -pvk "myconfig.pvk" -spc "myconfig.cer" -pfx "myconfig.pfx" -pi
これにより、myconfig.pvk、myconfig.cer、myconfig.pfxの3つのファイルが作成されます。
問題は秘密鍵がpfxファイルに保存されておらず、再起動後に毎回再認証する必要があることだと思いますが、暗号化についてはその方法を知るのに十分な知識がありません。さらに、WinFormsアプリは、制御対象のマシンへの配布が非常に限られているため、各証明書を手動でインストールしたいと思います。
私は暗号化の初心者で、行き詰まっています。.pfxファイルをマシンにロードし、秘密鍵(私は知っていますが、ユーザーには通知しません)を入力し、それを永続的に保存することはできますか?何かが足りませんか?インストールする必要のある別の証明書ファイル、またはそれを生成する方法はありますか?秘密鍵にアクセスできるようにしておきたくありません。誰かがapp.configを盗んだ場合、私は彼らがそれを復号化できるようにしたくありません。
注:RsaProtectedConfigurationProviderとDPAPIProtectedConfigurationProviderについて読みました。Azureで動作するため、PKCS12ProtectedConfigurationProviderを使用することを選択しました。参照:http://blogs.msdn.com/b/sqlazure/archive/2010/09/07/10058942.aspx