前編はこちら:「構成ファイルの暗号化/復号化(前編)」
前回は構成ファイルを暗号化して実行したけどうまくいかないっ!ってとこまで見ていきました。
まずはエラーメッセージを確認してみましょう。
エラーメッセージ、こんなん出ましたけど。
'/WebApp' アプリケーションでサーバー エラーが発生しました。
構成にエラーがあります。
説明: この要求を処理するために必要な構成ファイルの処理中にエラーが発生しました。以下のエラーの詳細を確認し、構成ファイルに変更を加えてください。
パーサー エラー メッセージ: プロバイダ 'RsaProtectedConfigurationProvider' を使用して復号化することができませんでした。プロバイダからのエラー メッセージ: RSA キー コンテナを開くことができませんでした。
ソース エラー:
行 11:
行 12:
行 13: 行 14: xmlns="http://www.w3.org/2001/04/xmlenc#">
行 15:
|
ソース ファイル: D:\webappsite\webapp\web.config 行: 13
バージョン情報: Microsoft .NET Framework バージョン:2.0.50727.3082; ASP.NET バージョン:2.0.50727.3082
ポイントはずばり「RSA キー コンテナを開くことができませんでした。」にあります。
あと、「プロバイダ 'RsaProtectedConfigurationProvider' を使用して復号化することができませんでした。」を見てみると、そのエラーを出しているプロバイダーが“RsaProtectedConfigurationProvider”だってこともわかります。
さらに、謎解きの手がかりとして暗号化前と後のweb.configを見比べてみましょう。
web.config に残された手がかり
まずは暗号化前のconnectionStrings要素を抜粋
1: <connectionStrings>
2: <add name="carboDBConnectionString" connectionString="Data Source=localhost;Initial Catalog=CARBODB;Persist Security Info=True;User ID=CARBODB;Password=CARBODB"
3: providerName="System.Data.SqlClient" />
4: < span>connectionStrings>
5:
次に暗号化後
1: <connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider">
2: <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
3: xmlns="http://www.w3.org/2001/04/xmlenc#">
4: <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
5: <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
6: <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
7: <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
8: <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
9: <KeyName>Rsa Key< span>KeyName>
10: < span>KeyInfo>
11: <CipherData>
12: <CipherValue>TSN6xejPlJgaMCi94oOOKr8su62WZJ7lY7X5+VBVh4LHAvl4E6pmmRoPDs5B1o4ui06dYNYUgOZ3zwj6c+fWj3ttB3mfZkxgjjQbl3K7Rjo7UcrM+FI1GGzhvTJq3wD8uA7XGFjYDTtNqDdcmEcBD83TjvUvpuEz3FXmpScFpUo=< span>CipherValue>
13: < span>CipherData>
14: < span>EncryptedKey>
15: < span>KeyInfo>
16: <CipherData>
17: <CipherValue>2QtsIq7IlftkzC8nNffjJ5eQ8kRJOt2RTDe9DrLsK8KDyj//60hjmDXJ5ELtwyanRVYoNGyKS1bB9Gr6al5IbodO3q+ghBJjpo0EuF/Hxj4/KC7q+3VYv/TkaqDMMKmJzUBbeypDn3Bg/9azEvDlsisdIMN0+kZUlsfRstRMXxG6h0SGteyibqnRPxCaUvU0SDfII1jbJvEM9efqAPsME3hHnlBsjQBfzcgagVAGJSm3WUo2r1as2e2lxy+7iHK1Jmv+W9AV0nAJhIo3Zrfjge6YqmRmMLzSakLvhE9oq6E2yV+VXfIbgpFPou5MW7jRWNUL59lt0n9bX6CGReeMvQ==< span>CipherValue>
18: < span>CipherData>
19: < span>EncryptedData>
20: < span>connectionStrings>
21:
めっさ行が増えてるけど、ポイントは1行目。
configProtectionProvider="RsaProtectedConfigurationProvider"
ここで暗号化に使われているプロバイダーが指定されております。
# なぜかMSDNのconnectionStrings要素に説明がないんですが...
でも、キーコンテナに関する記述がありません。
実は、RsaProtectedConfigurationProviderが使うキーコンテナ名はデフォルト値なので、個々の構成ファイルに記述はなくって、machine.configに記述があります。
ってことで、該当のmachine.configへ。
# あ、ちなみに、machine.configは%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\CONFIGの下にあるのよ。
# さらに、.NET Framework 3.0も3.5もコアは2.0と同じなので、machine.configの場所も同じ。
1: <configProtectedData defaultProvider="RsaProtectedConfigurationProvider">
2: <providers>
3: <add name="RsaProtectedConfigurationProvider" type="System.Configuration.RsaProtectedConfigurationProvider,System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" description="Uses RsaCryptoServiceProvider to encrypt and decrypt" keyContainerName="NetFrameworkConfigurationKey" cspProviderName="" useMachineContainer="true" useOAEP="false"/>
4: <add name="DataProtectionConfigurationProvider" type="System.Configuration.DpapiProtectedConfigurationProvider,System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" description="Uses CryptProtectData and CryptUnProtectData Windows APIs to encrypt and decrypt" useMachineProtection="true" keyEntropy=""/>
5: < span>providers>
6: < span>configProtectedData>
7:
うしろーーーーの方に書いてあるけど、
keyContainerName="NetFrameworkConfigurationKey"
ってのがキーコンテナ名でございます。
で、このキーコンテナを開けることができないっちゅーエラーだったわけなんです。
いわゆるアクセス権限がない状態です。
じゃぁ、権限をあげよーってことなのですが、またまた長くなってきたんで、続きは後編で。
☆ミ(*^▽^*)ノ彡☆
# えぇ、「後編」を「中編」に変えちゃいました。(^-^)
# だって長い記事って読む気なくすでしょ。(^・^)