如何将Sitecore FIPS配置节点补丁到Azure AppService的machine.config中
你之前查到的启动任务+AppCmd的方案是针对旧版Azure云服务(Cloud Service Web Role)设计的,当前Azure App Service是全托管PaaS架构,VM实例会被定期回收、重置,直接修改系统级machine.config的操作会被平台覆盖,完全没必要照搬旧方案,用应用级配置就能实现完全等效的合规效果。
实现原理
.NET框架对加密配置的加载有固定优先级:应用根目录web.config中的加密配置 > 系统级machine.config配置。只要在应用自己的web.config里写入要求的加密映射节点,就能完全覆盖同路径下的系统配置,等效于在machine.config中插入了对应补丁,完全满足Sitecore的FIPS合规要求。
具体操作
- 打开站点根目录的
web.config,定位到<configuration>根节点。注意插入的节点必须和现有顶级配置平级,不能放到<system.web>、<runtime>等其他子配置节内部。 - 在根节点下插入如下配置,必须把
Sitecore.Kernel的版本号替换为当前项目实际引用的DLL版本,不能留占位符:
<mscorlib> <cryptographySettings> <cryptoNameMapping> <cryptoClasses> <cryptoClass AESPROXY="Sitecore.SecurityModel.Cryptography.AesCryptoServiceProviderProxy, Sitecore.Kernel, 替换为实际部署的DLL版本号, Culture=neutral"/> </cryptoClasses> <nameEntry name="Rijndael" class="AESPROXY"/> <nameEntry name="System.Security.Cryptography.Rijndael" class="AESPROXY"/> <nameEntry name="System.Security.Cryptography.RijndaelManaged" class="AESPROXY"/> <nameEntry name="AesManaged" class="AESPROXY"/> <nameEntry name="System.Security.Cryptography.AesManaged" class="AESPROXY"/> </cryptoNameMapping> </cryptographySettings> </mscorlib>
- 保存文件,重新部署站点到Azure App Service即可。
为什么不能照搬旧方案改系统machine.config
- Azure App Service没有开放主机级别的管理员权限,用户无法直接定位、修改系统路径下的machine.config文件
- 就算通过特殊手段临时修改了machine.config,VM实例因为平台维护、负载均衡、弹性扩缩容等原因被回收重建后,所有修改都会丢失,配置不具备持久性
- 旧的启动任务、AppCmd操作逻辑是基于非托管的Cloud Service VM开放管理员权限的前提设计的,和当前App Service的PaaS运行架构完全不兼容
生效验证
- 部署完成后,在Sitecore后台的诊断工具中查看加密提供程序映射列表,确认Rijndael、AesManaged等选项已经指向Sitecore的AesCryptoServiceProviderProxy类
- 开启Sitecore的FIPS合规开关后,执行一次站点核心加密逻辑(用户登录、内容编辑保存、媒体库操作),确认无“未通过FIPS验证的加密算法”类报错
内容的提问来源于stack exchange,提问作者Matthew Dresser
相关产品推荐
相关产品推荐

