Windows Server 2012 仮想マシンで実行されている Windows Azure ホステッド サービスにデプロイされた MVC アプリケーションがあります。web.config
ファイルには、 : 、、およびを使用してPKCS12ProtectedConfigurationProvider
暗号化された 3 つのセクションがあります。関連するセクションは次のようになります。connectionStrings
dataCacheClients
system.net/mailSettings/smtp
<configuration>
...
<configProtectedData>
<providers>
<add name="CustomProvider" thumbprint="[this is secret]"
type="Pkcs12ProtectedConfigurationProvider.Pkcs12ProtectedConfigurationProvider, PKCS12ProtectedConfigurationProvider, Version=1.0.0.0, Culture=neutral, PublicKeyToken=34da007ac91f901d" />
</providers>
</configProtectedData>
...
<connectionStrings configProtectionProvider="CustomProvider">
<EncryptedData ... ommitted for brevity
</connectionStrings>
...
<system.net>
<mailSettings>
<smtp configProtectionProvider="CustomProvider">
<EncryptedData ommitted for brevity
</smtp>
</mailSettings>
</system.net>
...
<dataCacheClients configProtectionProvider="CustomProvider">
<EncryptedData ommitted for brevity
</dataCacheClients>
...
</configuration>
上記のすべてが完全に正常に動作します。Azure にデプロイすると、接続文字列、SMTP メール、およびデータ キャッシュがすべて機能します。プロバイダーは私のPKCS12ProtectedConfiguration
カスタム証明書を使用してセクションを復号化し、すべて問題ありません。
ただし、同じアプローチを使用して暗号化することはできないようですweb.config/appSettings
。次のようなものをAzureにデプロイしようとすると...
<configuration>
...
<appSettings configProtectionProvider="CustomProvider">
<EncryptedData ommitted for brevity
</appSettings>
...
</configuration>
...次に、次の例外が発生します。
Server Error in '/' Application.
Configuration Error
Description: An error occurred during the processing of a configuration file
required to service this request. Please review the specific error details
below and modify your configuration file appropriately.
Parser Error Message: An error occurred loading a configuration file: Could not
load file or assembly 'PKCS12ProtectedConfigurationProvider, Version=1.0.0.0,
Culture=neutral, PublicKeyToken=34da007ac91f901d' or one of its dependencies.
The system cannot find the file specified.
Source Error:
Line 41: </EncryptedData>
Line 42: </connectionStrings>
Line 43: <appSettings configProtectionProvider="CustomProvider">
Line 44: <EncryptedData ...>
Line 45: <EncryptionMethod .../>
Source File: E:\sitesroot\0\web.config Line: 43
Assembly Load Trace: The following information can be helpful to determine why
the assembly 'PKCS12ProtectedConfigurationProvider, Version=1.0.0.0,
Culture=neutral, PublicKeyToken=34da007ac91f901d' could not be loaded.
WRN: Assembly binding logging is turned OFF.
To enable assembly bind failure logging, set the registry value
[HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
Note: There is some performance penalty associated with assembly bind failure
logging.
To turn this feature off, remove the registry value
[HKLM\Software\Microsoft\Fusion!EnableLog].
ただしPKCS12ProtectedConfigurationProvider.dll
/bin
、次の理由により、がフォルダーにあることはわかっています。
- VM にリモート接続し、両方
approot/bin
で確認しましたsiteroot/bin
appSettings
暗号化されていない状態で展開すると、この dll を使用して他の 3 つのセクションが正常に復号化されます。
これは、セクションPKCS12ProtectedConfigurationProvider.dll
を解析してロードするまで、アセンブリ ローダーがファイルを探すことができないかのようです。appSettings
プロバイダー構成セクションの Version、Culture、および PublicKeyToken 部分を省略しようとしましたが、エラーは次のように変わります。
Parser Error Message: An error occurred loading a configuration file: Could not
load file or assembly 'PKCS12ProtectedConfigurationProvider' or one of its
dependencies. The system cannot find the file specified.
Windows Server 2012 仮想マシンで実行されている Windows Azure ホステッド サービスにデプロイするときにweb.config/appSettings
、カスタムを使用して暗号化することはできますか? configProtectionProvider
もしそうなら、私はここで何が欠けていますか?
アップデート:
これを投稿した後、レジストリ キーをオンにするFusion!EnableLog
と、例外で次の追加情報が得られます。
Assembly Load Trace: The following information can be helpful to determine why
the assembly 'PKCS12ProtectedConfigurationProvider, Version=1.0.0.0,
Culture=neutral, PublicKeyToken=34da007ac91f901d' could not be loaded.
=== Pre-bind state information ===
LOG: User = NT AUTHORITY\NETWORK SERVICE
LOG: DisplayName = PKCS12ProtectedConfigurationProvider, Version=1.0.0.0, Culture=neutral, PublicKeyToken=34da007ac91f901d
(Fully-specified)
LOG: Appbase = file:///d:/windows/system32/inetsrv/
LOG: Initial PrivatePath = NULL
Calling assembly : (Unknown).
===
LOG: This bind starts in default load context.
LOG: No application configuration file found.
LOG: Using host configuration file: D:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet.config
LOG: Using machine configuration file from D:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config.
LOG: Post-policy reference: PKCS12ProtectedConfigurationProvider, Version=1.0.0.0, Culture=neutral, PublicKeyToken=34da007ac91f901d
LOG: Attempting download of new URL file:///d:/windows/system32/inetsrv/PKCS12ProtectedConfigurationProvider.DLL.
LOG: Attempting download of new URL file:///d:/windows/system32/inetsrv/PKCS12ProtectedConfigurationProvider/PKCS12ProtectedConfigurationProvider.DLL.
LOG: Attempting download of new URL file:///d:/windows/system32/inetsrv/PKCS12ProtectedConfigurationProvider.EXE.
LOG: Attempting download of new URL file:///d:/windows/system32/inetsrv/PKCS12ProtectedConfigurationProvider/PKCS12ProtectedConfigurationProvider.EXE.
ここで別の質問があります。IISinetsrv
がアプリの/bin
フォルダーではなく、このアセンブリのパスを検索するのはなぜですか? ログに「アプリケーション構成ファイルが見つかりません」と表示されます。これは、アセンブリ バインダーがweb.config
暗号化されていないappSettings
セクションを解析してロードするために を見つける必要があるということですか?