HTTP 符号存储

通过使用通过 symsrv.dll 支持的 SRV 协议(随调试器一起提供),可以使用 HTTP(而不是 UNC/SMB)访问符号存储。

当防火墙不允许客户端和服务器之间的 SMB 时,通常使用 HTTP 而不是 SMB。 生产环境和实验室环境是一个很好的示例。

由于符号路径链的只读性质,HTTP 符号服务器不能是符号路径链中的下游存储。 符号服务器代理(ISAPI 筛选器)绕过这个限制。 SymProxy 使用预配置的上游符号存储将缺少的文件下载到服务器的文件系统。 筛选器将文件下载到文件系统,允许 IIS 将文件下载到客户端,从而还原符号存储链接的概念。 有关详细信息,请参阅 SymProxy

将 IIS 配置为符号存储相对容易,因为符号文件只是用作静态文件。 唯一的非默认设置是 MIME 类型的配置,以允许将符号文件下载为二进制流。 这可以通过将“*”通配符应用于符号文件夹的虚拟目录来完成。

若要使符号存储可通过 Internet 访问,必须同时配置包含符号文件和 Internet Information Services(IIS)的目录。

注意 由于 IIS 配置为提供符号文件的方式,因此不建议将同一服务器实例用于任何其他目的。 通常,符号服务器所需的安全设置对于其他用途没有意义,例如对于面向外部的商业服务器。 请确保此处所述的示例配置对你的环境有意义,并根据需要对其进行调整。

创建符号目录

首先选择用作符号存储的目录。 在我们的示例中,我们调用此目录 c:\symstore,网络上服务器的名称为 \SymMachineName。

有关如何填充符号存储的详细信息,请参阅 SymStore符号存储文件夹树

配置 IIS

必须配置 Internet Information Services (IIS),以便通过创建虚拟目录并配置 MIME 类型来提供符号。 完成此作后,可以选择身份验证方法。

创建虚拟目录

  1. 打开 Internet 信息服务 (IIS) 管理器

  2. 导航到 网站

  3. 右键单击 “默认网站 ”或正在使用的网站的名称,然后选择“ 添加虚拟目录...”

  4. 键入符号别名,然后单击下一步

    为便于管理,建议对文件夹、共享和虚拟目录使用相同的名称。

  5. 对于 路径 ,请输入 c:\SymStore ,然后单击“ 下一步”。

  6. 单击 “确定” 完成添加虚拟目录。

为服务器执行一次子目录配置过程。 请注意,这是一个全局设置,将影响站点根文件夹中未托管的应用程序。

子目录配置

  1. 导航到 [计算机]

  2. 打开 配置编辑器

  3. 导航到 系统 ApplicationHost/sites

  4. 展开 virtualDirectoryDefaults

  5. allowSubDirConfig 设置为 False

为服务器执行此过程一次。 请注意,这是一个全局设置,将影响未托管在站点根文件夹中的应用程序。

可选,使符号文件可浏览

  1. 导航到 [计算机] |网站 |[网站] |符号

  2. 双击中心窗格中的 “目录浏览 ”。

  3. 在右窗格中单击“ 启用 ”。

下载内容的 MIME 类型需要设置为应用程序/八进制流,以允许 IIS 传送所有符号文件。

配置 MIME 类型

  1. 右键单击 符号 虚拟目录,然后选择 “属性”。

  2. 选择 HTTP 标头

  3. 单击 MIME 类型

  4. 单击新建

  5. 对于 “扩展”,请键入 *

  6. 对于 MIME 类型,请键入 application/octet-stream

  7. 若要退出 MIME 类型 对话框,请单击“ 确定”。

  8. 若要退出 符号属性,请单击“ 确定”。

可以编辑 web.config 文件,为符号配置 MIME 类型。 此方法清除继承的 MIME 类型,并添加一个通配符 * MIME 类型以包含所有类别。 在某些 IIS 配置中继承 MIME 类型时,可能需要此方法。

使用 web.config 配置 MIME 类型

  1. 编辑 web.config 文件,如下所示。

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
            <directoryBrowse enabled="true" />
            <staticContent>
                <clear />
                <mimeMap fileExtension=".*" 
    mimeType="application/octet-stream" />
            </staticContent>
        </system.webServer>
    </configuration>
    
  2. 重启 IIS。

IIS 现已准备好从符号存储中提供所有类型的符号文件。

配置身份验证

可以将 IIS 配置为使用“集成 Windows 身份验证”,以便客户端(例如windbg.exe)可以针对 IIS 自动进行身份验证,而无需提示最终用户输入凭据。

注意 仅在 IIS 上配置 Windows 身份验证,以控制对符号服务器的访问(如果这适用于你的环境)。 如果环境需要,可以使用其他安全选项进一步控制对 IIS 的访问。

将身份验证方法配置为匿名

  1. 启动 Internet Information Services (IIS) 管理器

  2. 导航到 [计算机] |网站 |[网站] |符号

  3. 在中心窗格中双击“ 身份验证 ”。

  4. “身份验证”和“访问控制 ”下,单击“ 编辑”。

  5. 右键单击 “Windows 身份验证 ”,然后选择“ 启用”。

  6. 对于所有其他身份验证提供程序,右键单击每个提供程序并选择“ 禁用”。

  7. 单击 “确定 ”完成身份验证配置。

如果未列出窗口身份验证,请使用 打开和关闭 Windows 功能 启用该功能。 该功能的位置在每个版本的 Windows 中都是不同的。 在 Windows 8.1/Windows 2012 R2 中,它位于 Internet Information Services 下 |万维网服务 |安全。

禁用 Kerberos 支持

SymSrv.dll 连接到 IIS 时不支持 Kerberos 身份验证。 因此,必须在 IIS 中禁用 Kerberos 身份验证,NTLM 需要设置为唯一的 Windows 身份验证协议。

注意 仅当适合你的环境时,才禁用 Kerberos 身份验证安全性。

使用 appcmd.exe禁用 Kerberos 支持

  1. 打开命令提示符窗口

  2. 若要禁用 Kerberos 并强制使用 NTLM,请使用以下命令:

    appcmd.exe set config -section:system.webServer/security/authentication/windowsAuthentication /+"providers.[value='NTLM']" /commit:apphost
    
  3. 若要返回启用 Kerberos 的默认值,请使用以下命令:

    appcmd.exe set config -section:system.webServer/security/authentication/windowsAuthentication /+"providers.[value='Negotiate,NTLM']" /commit:apphost
    

配置 SymSrv 客户端身份验证提示

当 SymSrv 收到身份验证请求时,调试器可以显示身份验证对话框或根据请求的配置方式自动拒绝请求。 可以使用 !sym prompts on|off 来配置此行为。 例如,若要打开提示,请使用此命令。

!sym prompts on

若要检查当前设置,请使用此命令。

!sym prompts

有关详细信息,请参阅 !sym防火墙和代理服务器