カスタム構成セクションを暗号化するために使用します。aspnet_regiisを - あなたはそれを行うことができますか?
-
16-09-2019 - |
質問
私は、カスタム構成セクションを持つWebアプリケーションを持っています。その節はI'ldは(ます。aspnet_regiisを使用するのではなく、それを自分で行うことを期待していた)を暗号化したい情報が含まれています。
のWeb.Configます:
<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<configSections>
<section name="MyCustomSection"
type="MyNamespace.MyCustomSectionHandler, MyAssembly"/>
</configSections>
<configProtectedData>
<providers>
<clear />
<add name="DataProtectionConfigurationProvider"
type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a,
processorArchitecture=MSIL"
keyContainerName="MyKeyContainer"
useMachineContainer="true" />
</providers>
</configProtectedData>
<MyCustomSection>
<blah name="blah1">
<blahChild name="blah1Child1" />
</blah>
</MyCustomSection>
設定ハンドラは、それを暗号化しようとする前に、素晴らしい作品。私はそれを暗号化しようとすると:
ます。aspnet_regiis -pef "MyCustomSection" C:\のinetpub \ wwwrootの\名前がMyWebSite -prov DataProtectionConfigurationProvider
私はエラーを取得します:
暗号化構成セクション...アン エラーが発生して作成します 以下のための構成セクションハンドラ MyCustomSection:ファイルを読み込めませんでした。 またはアセンブリ「MyAssembly」またはそのの1 依存関係。システムが見つけることができません ファイルが指定されています。 (C:\のinetpub \ wwwrootの\名前がMyWebSite \ web.configファイル 5行目)。
私は、設定され、プロバイダなし/で試してみました。 /セクショングループなし。 /なしでは手の前にウェブサイトを開始しました。私は一時的に登録をGACに私のアセンブリを入れて試してみました。また、私はちょうど運と鉱山、いなかった何かをしようとする私のlog4netのセクションを試してみました。私は管理者としてコマンドプロンプトを実行しました。何か案は?それともます。aspnet_regiisだけのカスタムセクションのために使用することができないのですか?
MSDN を見た後に一つの最終ショットが変更されましたむしろ、それは技術的に2.0で廃止されましたので、(それがます。aspnet_regiisバージョンに関するものだった期待して)IConfigurationSectionHandlerを実装するよりのConfigurationSectionから継承するために私のハンドラ。そこにはありません運のいずれか。
すべてのアイデアは、私に知らせてください。ありがとう!
解決
aspnet_regiis
は、アセンブリを結合することができなければなりません。通常の.NETバインディングのルールが適用されます。
私はこのような民間のパスとaspnet_regiis_bin
と同じディレクトリとaspnet_regiis.exe
とaspnet_regiis.exe.config
ファイルにaspnet_regiis_bin
というディレクトリを作成することでこれを回避ます:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="aspnet_regiis_bin"/>
</assemblyBinding>
</runtime>
</configuration>
私は、その後aspnet_regiis_bin
がそれらを見つけることができるようにaspnet_regiis
にカスタム構成セクションを定義するアセンブリをコピーします。
この手順では、名前の強いまたはGACにあるようにアセンブリを必要としませんが、フレームワークのディレクトリにいじり必要はない。
他のヒント
私はtemporarly configSections要素の内容をコメントアウトすることにより回避策を使用しています:
<configSection>
<!--
<section name="CustomSection" type="" />
-->
</configSection>
あなたはその後、いつものようにaspnet_regiis -pef
を使用して暗号化を実行することができます。これが実行された後だけセクションのコメントを解除し、あなたのサイトを実行する準備ができています。
この合計ハックですが、私は強くあなたのカスタムセクションを定義するアセンブリを命名し、あなたはどちらか、機能しなかったと述べたが、(それをGACifyingせずにそれを行うための別の方法があることをわからない、と私は」 )なぜそれはないだろうメートルわかりません。 <ドライブ>でます。aspnet_regiis実行されるため:(WinXPの中)\ WINDOWS \ Microsoft.Net \ Frameworkの\ <バージョン>フォルダには、関連するフレームワーク\ <バージョン>フォルダにあなたのconfigセクションを定義するDLLをコピーし、それができ動作するはずです。
記録のために、私は私のためにこれを行うにはほとんどメンテナンスのページになってしまっています。
var currentConfig = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~/");
// Unprotect
ConfigurationSection section = currentConfig.GetSection("MyCustomSection");
if (section.SectionInformation.IsProtected)
{
section.SectionInformation.UnprotectSection();
currentConfig.Save();
}
// Protect
if (!section.SectionInformation.IsProtected)
{
section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
currentConfig.Save();
}
警告:設定ファイルへの書き込みアクセスが必要になりますあなたのプロセスが変更されています。あなたはこれを実行できるユーザーを承認するいくつかの方法をお勧めします。あなたは一般あなたが保存したときにウェブサイトを再起動します。
を正しいものとして示されている答えは正しいです。私は、コメントを追加したかったが、これはコメント(サンプル設定項目)の長すぎるためできませんでした。
セクション名は、アセンブリの完全な名前を使用する必要があります。ランタイムアセンブリの資格は、Aspnet_regiis.exeに動作しません。
このWORKSます:
<configSections>
<section name="securityConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Security.Configuration.SecuritySettings, Microsoft.Practices.EnterpriseLibrary.Security, Version=5.0.414.0, Culture=neutral, PublicKeyToken=9c844884b2afcb9e" />
</configSections>
しかし、これは動作しません。
<configSections>
<section name="securityConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Security.Configuration.SecuritySettings, Microsoft.Practices.EnterpriseLibrary.Security" />
</configSections>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<qualifyAssembly partialName="Microsoft.Practices.EnterpriseLibrary.Security" fullName="Microsoft.Practices.EnterpriseLibrary.Security, Version=5.0.414.0, Culture=neutral, PublicKeyToken=9c844884b2afcb9e" />
</assemblyBinding>
</runtime>