1

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に表示されるこの迷惑なメッセージを除いて、すべてが正常に機能します。私は答えを見つけるためにたくさんグーグルしてきましたが、役に立ちませんでした。誰か助けてもらえますか?

4

0 に答える 0