Azure模拟器/ IIS Express和SSL客户端证书身份验证时出现web.config错误

时间:2014-06-10 18:51:56

标签: azure ssl iis-express

在任何人感到困惑之前,这是针对 IIS Express ,而不是IIS。

我们有一个需要SSL客户端证书身份验证的MVC5应用程序。在开发中,它在Azure模拟器中运行,在VS2013中以管理员权限(对于端口80/443)运行。

当我们在VS2013(F5)中启动应用程序时,它在Azure模拟器中运行它,但它会立即抛出HTTP错误500.19 - 内部服务器错误及其详细信息

  

此配置部分不能在此路径中使用。有时候是这样的   当该部分被锁定在父级别时。锁定是通过   default(overrideModeDefault =“Deny”),或由位置明确设置   tag with overrideMode =“Deny”或legacy allowOverride =“false”。

配置源是我们的MVC5应用程序的web.config,位于以下行:

<security>
    <access sslFlags="SslNegotiateCert" />
</security>

有趣的是,我已将c:\users\<my_username>\Documents\IISExpress\Config\applicationhost.config设置为

<section name="access" overrideModeDefault="Allow" />

关于此问题的文档不多,但无论我们从谷歌那里得到什么,都表明对于常规的IIS Express,这应该足够了。我怀疑在Azure模拟器+ Admin管理员权限内运行IIS Express会破坏某些功能但无法诊断它。

有没有人知道如何让这个工作?

1 个答案:

答案 0 :(得分:4)

好的,所以this question and it's answer帮了很多忙。怀疑,c:\users\<my_username>\Documents\IISExpress\Config\applicationhost.config似乎并不重要,因为Azure Emulator似乎产生了另一个不关心该文件的IIS Express实例。

正确的方法似乎是通过AppCmd.exe“解锁”该设置,因此解决方案如下:

  1. 在Azure Cloud Service中添加启动任务。

    • 编辑ServiceDefinition.csdef
    • 将以下内容添加到您的角色中(对我来说,这里面是<Webrole> ... </WebRole>
    <Startup>
    <Task commandLine="UnlockSslSettingsSection.cmd" executionContext="elevated" taskType="simple" />
    </Startup>
    
  2. UnlockSslSettingsSection.cmd文件添加到解决方案的项目中,然后添加以下两行(两行都很重要,不要重构)。

    IF NOT DEFINED APPCMD SET APPCMD=%SystemRoot%\system32\inetsrv\AppCmd.exe 
    %APPCMD% unlock config /section:system.webServer/security/access
    
  3. 在解决方案资源管理器中,转到项目,右键单击UnlockSslSettingsSection.cmd =&gt; properties =&gt;将“复制到输出目录”设置为“始终复制”