むりせず♪なまけず? ~ぷろくらすてぃねいたーの言い訳雑記~

よた ときどき .NET  by 刈歩 菜良 CTP

目次

ニュース

C# VB.NET掲示板
C#, VB.NET 掲示板

わんくま同盟
わんくま同盟

Vimエディタ日本語版

あわせて読みたい

日記カテゴリ

書庫

Blog 利用状況

構成ファイルの暗号化/復号化(中編)

前編はこちら:「構成ファイルの暗号化/復号化(前編)

 

前回は構成ファイルを暗号化して実行したけどうまくいかないっ!ってとこまで見ていきました。

まずはエラーメッセージを確認してみましょう。

 

エラーメッセージ、こんなん出ましたけど。

'/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: 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 KeyKeyName>
 10:      KeyInfo>
 11:      <CipherData>
 12:       <CipherValue>TSN6xejPlJgaMCi94oOOKr8su62WZJ7lY7X5+VBVh4LHAvl4E6pmmRoPDs5B1o4ui06dYNYUgOZ3zwj6c+fWj3ttB3mfZkxgjjQbl3K7Rjo7UcrM+FI1GGzhvTJq3wD8uA7XGFjYDTtNqDdcmEcBD83TjvUvpuEz3FXmpScFpUo=CipherValue>
 13:      CipherData>
 14:     EncryptedKey>
 15:    KeyInfo>
 16:    <CipherData>
 17:     <CipherValue>2QtsIq7IlftkzC8nNffjJ5eQ8kRJOt2RTDe9DrLsK8KDyj//60hjmDXJ5ELtwyanRVYoNGyKS1bB9Gr6al5IbodO3q+ghBJjpo0EuF/Hxj4/KC7q+3VYv/TkaqDMMKmJzUBbeypDn3Bg/9azEvDlsisdIMN0+kZUlsfRstRMXxG6h0SGteyibqnRPxCaUvU0SDfII1jbJvEM9efqAPsME3hHnlBsjQBfzcgagVAGJSm3WUo2r1as2e2lxy+7iHK1Jmv+W9AV0nAJhIo3Zrfjge6YqmRmMLzSakLvhE9oq6E2yV+VXfIbgpFPou5MW7jRWNUL59lt0n9bX6CGReeMvQ==CipherValue>
 18:    CipherData>
 19:   EncryptedData>
 20: 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:     providers>
  6: configProtectedData>
  7: 

うしろーーーーの方に書いてあるけど、

keyContainerName="NetFrameworkConfigurationKey"

ってのがキーコンテナ名でございます。

で、このキーコンテナを開けることができないっちゅーエラーだったわけなんです。

いわゆるアクセス権限がない状態です。

 

じゃぁ、権限をあげよーってことなのですが、またまた長くなってきたんで、続きは後編で。

☆ミ(*^▽^*)ノ彡☆

 

# えぇ、「後編」を「中編」に変えちゃいました。(^-^)

# だって長い記事って読む気なくすでしょ。(^・^)

投稿日時 : 2009年3月30日 15:01

Feedback

# 構成ファイルの暗号化/復号化(後編) 2009/03/31 4:39 むりせず♪なまけず? ~ぷろくらすてぃねいたーの言い訳雑記~

構成ファイルの暗号化/復号化(後編)

# 構成ファイルの暗号化/復号化(補足) 2009/04/08 13:10 むりせず♪なまけず? ~ぷろくらすてぃねいたーの言い訳雑記~

構成ファイルの暗号化/復号化(補足)

タイトル  
名前  
Url
コメント