本文维护在:
管理员的需要确认加密应用程序块的初始部署是有计划且可管理的,以及确认后来的部署更新仅对已存在的使用应用程序块的应用程序产生最少的影响。本主题将解决这些和其他管理主题:
- 部署加密应用程序块
- 更新加密应用程序块
- 度量加密应用程序块
注意:在加密应用程序块部署到任何计算机以前,必须先安装 .NET Framework。
部署加密应用程序块
加密应用程序块以多个程序集组成。每个属于加密应用程序块的程序集都有一个以
Microsoft.Practices.EnterpriseLibrary.Security.Cryptography 开头的文件名。另外,应用程序块依赖于通用程序集和
ObjectBuilder 子系统。使用加密应用程序块的应用程序可以部署在下列二个配置的任意一个中:
- 部署为在应用程序文件夹层次中的私有程序集。
- 部署为任意文件系统位置或者在全局程序集缓存中做为共享程序集。
部署加密应用程序块为私有程序集 如果应用程序没有使用来自全局程序集缓存中的可用服务,加密应用程序块就可能被部署在应用程序目录结构中。这简化了部署,因为在目标机器上可以使用
xcopy 命令来安装整个应用程序,包含加密应用程序块程序集。如果在同一计算机上的多个应用程序使用加密应用程序块,可以在每个应用程序目录层次中安装一个程序集 的副本。这允许每个应用程序的程序集副本可以被单独更新。关于强命名 Enterprise Library 程序集的信息,请参见强命名 Enterprise Library 程序集。
部署加密应用程序块为共享程序集 可以签名一个强名称到加 密应用程序块程序集。在 Visual Studio .NET 和 .NET Framework SDK 中都包含有进行强命名的工具。在程序集被强命名后,它们就可以被部署在一个共享的位置并由多个应用程序使用。可以选择部署程序集在任何文件系统位置,并在 每个使用加密应用程序块的应用程序的配置文件中添加
<codebase> 元素以指定程序集的位置。
更多类似的场景是在全局程序集缓存部署共享程序集。在此场景中,所有在计算机上的应用程序都可以使用程序集而不用进行任何附加的配置。可以使用下列工具之一来在全局程序集缓存中安装一个程序集:
- 一个安装程序,如 Microsoft Windows Installer, version 2.0
- 全局程序集缓存工具命令行实用程序( Gacutil.exe )
- .NET Framework 配置工具 ( Mscorcfg.msc )
分发密钥 图 1 示例了由应用程序块支持的管理和分发密钥的过程。在 Computer A 中,使用配置控制台来读取保存在一个文件中的已加密的密钥。配置控制台依赖于加密应用程序块来完成此事情。应用程序块使用 DPAPI 来在内存中解密密钥,然后使用配置控制台的加密密钥向导显示出来(如果没有使用向导来编辑密钥,它将在内存中保持加密)。当导出密钥到一个文件中时,应用 程序块使用提供的密码和一个随机生成的熵值来加密密钥。传输包含密钥的文件到 Computer B 中,然后使用配置控制台来从文件中导入密钥。在保存应用程序配置时,配置控制台使用应用程序块来用 DPAPI 加密密钥,并将它保存到一个本地文件中。
密钥分发 |
配 置控制台在配置源中的 <securityCryptographyConfiguration> 节中保存每个密钥文件的绝对路径。例如,如果使用的是默认配置源,应用程序配置文件将包含密钥文件的绝对路径。如果要将应用程序部署到另一计算机上,必须 部署密钥文件到同样的绝对路径中或者更新计算机上的配置源的 <securityCryptographyConfiguration> 节以反映新的位置。
更新加密应用程序块
如果加密应用程序块的一个更新版本可通知,可以安装更新的版本,然后所有应用程序都可以使用更新的程序集。然而,如果更新的版本引起某些应用程序的兼容问题,可以安装更新版本到全局程序集缓存中并配置某些应用程序使用更新后的版本,而其他的继续使用以前的版本。
更新私有程序集 如果加密应用程序块的程序集被部署为私有程序集,就可以用更新的 DLL 简单的替换掉应用程序文件夹层次中的早期版本的 DLL 来部署升级。
注意:可以保留早期版本的一个副本,这样如果在使用新的程序集时出现任何兼容问题,都可以恢复到早期的版本。
更新共享程序集 升级共享配置中的加密应用程序块最容易的方法是安装更新的 DLL 到全局程序集缓存中。默认的,通用语言运行时会尝试加载最后的构建和版本号,且与应用程序构建使用的程序集有着同样的主和次版本号的程序集。因此,如果主 版本号和次版本号没有改变,添加更新版本到全局程序集缓存中并自动更新所有引用加密应用程序块程序集的应用程序。
度量加密应用程序块
这是在应用程序配置文件中的用于开启/关闭度量的节。它们是可选的,但是在文件中必须同时出现或者同时不出现。如果忽略它们,这将与所有值都是
false 一样。<configSections> 节是指定
System.Configuration 库如果读取真实配置数据的地方。真实数据在
<instrumentationConfiguration> 节中。设计一个值为
true 以打开度量,设置值为
false 将关闭度量。三种度量为性能计数器、事件日志和 WMI 事件。
加密应用程序块性能计算器
表1 描述了加密应用程序块的性能计数器。
表1:加密应用程序块的性能计数器 性能计数器 | 描述 |
Hash Comparisons/sec | 哈希比较执行的速率。 |
Hash Mismatches/sec | 检测到的未匹配的哈希比较的速率。 |
Hash Operations/sec | 哈希纯文本的速率。 |
Symmetric Decryptions/sec | 执行对称解密的速率。 |
Symmetric Encryptions/sec | 执行对称加密的速率。 |
速率示例了随着时间的事件的增长数量,并按时间分割值的改变,以显示活动的速率。关于性能计数器的更多信息,请参见 MSDN 上的 .NET Framework 类库中的 。
加密应用程序块事件日志实体
表1列出了加密应用程序块的事件日志实体。监听器列是触发事件的类,事件列是事件的名称,异常列是异常的布尔值,主消息列是主要的错误消息,其他列是可用的任何其他信息。
表1:加密应用程序块事件日志实体 监听器 | 事件 | 异常 | 主消息 | 其他 |
SymmetricAlgorithmInstrumentationListener | CryptographicOperationFailed | true | 使用实例实例名时发生错误。 | 解密操作失败。 |
SymmetricAlgorithmInstrumentationListener | CryptographicOperationFailed | true | 使用实例实例名时发生错误。 | 加密操作失败。 |
HashAlgorithmInstrumentationListener | CryptographicOperationFailed | true | 使用实例实例名时发生错误。 | 哈希比较失败。 |
HashAlgorithmInstrumentationListener | CryptographicOperationFailed | true | 使用实例实例名时发生错误。 | 哈希创建失败。 |
DefaultCryptographyEventLogger | ConfigurationFailure | true | 使用实例实例名时发生错误。 | 为哈希算法实例实例名获取配置时出错。 |
DefaultCryptographyEventLogger | ConfigurationFailure | true | 使用实例实例名时发生错误。 | 为对称算法实例实例名获取配置时出错。 |
加密应用程序块 WMI 事件
加密应用程序块由下列 WMI 事件度量:
- HashOperationFailedEvent
- HashMisMatchDetectedEvent
- SymmetricOperationFailedEvent
- CryptograhyConfigurationFailureEvent
下列表格描述了每个 WMI 事件的属性。
表1描述了
HashOperationFailedEvent WMI 事件的属性
表1:HashOperationFailedEvent 的属性 WMI 属性 | 描述 |
ExceptionMessage | 在哈希失败时触发的异常的消息 |
ErrorMessage | 描述哈希操作时如何失败的消息。 |
InstanceName | 遭受失败的哈希提供程序的 ID ,就是在配置文件中指定的。 |
UtcTimeStamp | 哈希操作失败的时间 |
表 2 描述了
HashMisMatchDetectedEvent WMI 事件的属性
表 2:HashMisMatchDetectedEvent 的属性 WMI 属性 | 描述 |
InstanceName | 检测到未匹配的哈希提供程序的 ID ,就是在配置文件中指定的名称。 |
UtcTimeStamp | 未匹配检测到的时间。 |
表 3 描述了
SymmetricOperationFailedEvent WMI 事件的属性
SymmetricOperationFailedEvent 的属性 WMI 属性 | 描述 |
ExceptionMessage | 当对称操作失败时触发的异常的消息。 |
ErrorMessage | 描述对称操作是如何失败的消息。 |
InstanceName | 遭受失败的对称提供程序的 ID ,即在配置文件中指定的名称。 |
UtcTimeStamp | 对称操作失败的时间。 |
表 4 描述了
CryptographyConfigurationFailureEvent WMI 事件的属性
表 4 :CryptographyConfigurationFailureEvent 的属性 WMI 属性 | 描述 |
ExceptionMessage | 当试图创建或配置加密提供程序失败时触发的异常的消息。 |
InstanceName | 无法创建或配置的加密提供程序的 ID ,即在配置文件中指定的名称。 |
UtcTimeStamp | 配置失败发生的时间。 |