X509Certificateを使用してプロジェクトweb.configの2つのセクションを暗号化するために、カスタムの保護された構成プロバイダーを作成しました。1つはカスタムセクションで、もう1つはconnectionStringsセクションです。1つの厄介な問題を除いて、すべてが完全に正常に機能します。
Visual Studio 2012でアプリケーションを実行するたびに、次のエラーメッセージが表示されます。
構成ファイルから接続文字列情報を取得中に、次のエラーが発生しました。「構成の読み込み中にエラーが発生しました:ファイルまたはアセンブリを読み込めませんでしたFirstTitle.FastTitle.Security.X509ProtectedConfigurationProvider、Version = 1.0.0.0、Culture = neutral、PublicKeyToken=d9b660f7f535363a」
ただし、サイトは完全に正常に実行され、カスタム構成プロバイダーは期待どおりにインスタンス化され、web.configを正常に復号化します。
プロバイダーを含むアセンブリをGACにインストールすると、メッセージは表示されませんが、このプロジェクトに取り組んでいる開発者が多いことを考えると、実行する前にアセンブリをGACにインストールする必要はありません。プロジェクト。
また、この1つのプロジェクトでのみ使用されるため、GACにインストールする必要はないと思います。
さらに詳しい情報:
私の構成プロバイダーは、署名されたFirstTitle.FastTitle.Security.X509ProtectedConfigurationProviderという独自のプロジェクトにあります。
プロバイダーのコードは次のとおりです(インターフェイスは単なるカスタムインターフェイスです)。
public class X509ProtectedConfigurationProvider : ProtectedConfigurationProvider, IX509ProtectedConfigurationProvider
{
#region Private Fields
private const string _certNameConfigEntry = "CertSubjectDistinguishedName";
private X509Certificate2 certificate = null;
#endregion
public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config)
{
base.Initialize(name, config);
// Get the CN for the cert from the config.
string certSubjectDistinguishedName = config[_certNameConfigEntry];
// Get the certificate form the local cert store.
X509Store certStore = new X509Store(StoreLocation.LocalMachine);
try
{
certStore.Open(OpenFlags.ReadOnly);
// Find the matching certificate
X509Certificate2Collection certs = certStore.Certificates.Find(X509FindType.FindBySubjectDistinguishedName, certSubjectDistinguishedName, true);
if (certs.Count > 0)
{
certificate = certs[0];
}
else
{
certificate = null;
}
}
finally
{
certStore.Close();
}
}
public override System.Xml.XmlNode Decrypt(System.Xml.XmlNode encryptedNode)
{
// Load the config unto an XML document.
XmlDocument doc = encryptedNode.OwnerDocument;
EncryptedXml eXml = new EncryptedXml(doc);
eXml.DecryptDocument();
return doc.DocumentElement;
}
public override System.Xml.XmlNode Encrypt(System.Xml.XmlNode node)
{
// Load the config into an XML document.
XmlDocument doc = new XmlDocument();
doc.PreserveWhitespace = true;
doc.LoadXml(node.OuterXml);
EncryptedXml eXml = new EncryptedXml();
EncryptedData eData = eXml.Encrypt(doc.DocumentElement, certificate);
return eData.GetXml();
}
}
web.config内のconfigProtectedData要素は次のように設定されています(セキュリティ上の理由から証明書の名前を削除しました)。
<configProtectedData>
<providers>
<add name="X509Provider" type="FirstTitle.FastTitle.Security.X509ProtectedConfigurationProvider, FirstTitle.FastTitle.Security.X509ProtectedConfigurationProvider, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d9b660f7f535363a, processorArchitecture=MSIL" CertSubjectDistinguishedName="CN=NameRemoved"></add>
</providers>
</configProtectedData>
私が言っているように、VS2012に表示されるこの迷惑なメッセージを除いて、すべてが正常に機能します。私は答えを見つけるためにたくさんグーグルしてきましたが、役に立ちませんでした。誰か助けてもらえますか?