为本地 Azure DevOps 设置具有安全套接字层 (SSL) 的 HTTPS

Azure DevOps Server 2022 | Azure DevOps Server 2020 | Azure DevOps Server 2019

可以通过将 Azure DevOps Server 的部署配置为使用具有安全套接字层的超文本传输协议安全 (HTTPS) (SSL) 来增强部署的安全性。 可以选择要求使用此协议(可最大程度地提高部署的安全性),也可以选择为除支持默认的协议 (HTTP) 外还支持具有 SSL 的 HTTPS。 如果使用 Visual Studio 2013 Release Management,即使无法将其配置为同时支持 HTTP 和具有 SSL 的 HTTPS,你也可以通过配置使用具有 SSL 的 HTTPS。

在选择一种配置之前,请查看此处描述的优势和劣势。 在确定最符合组织的安全需求的配置之后,请按照此主题中的步骤来配置你的部署。

本主题内容

除 HTTP 外还支持具有 SSL 的 HTTPS 的优势

如果将 Azure DevOps Server 部署配置为支持这两种协议,则计算机已配置为使用 SSL 的 HTTPS 的用户将使用该协议进行连接,从而使部署更安全。 此外,针对 HTTP 部署计算机的用户仍能连接到部署。 虽然不应通过公共网络部署此配置,但在受控制的网络环境中继续支持 HTTP 连接能够提供下列优势:

  • 如果时间允许,可通过针对具有 SSL 的 HTTPS 配置客户端计算机来逐渐提高部署的安全性。 如果采取分阶段的方法,无需同时升级所有计算机,且未升级计算机的用户仍能连接到部署。

  • 可以更轻松地配置和维护Azure DevOps Server。

  • 采用 HTTP 进行 Web 服务之间的调用必须比采用具有 SSL 的 HTTPS 更快。 因此,对于性能要求的重要性超过安全风险的客户端计算机,可以继续支持 HTTP 连接。

要求所有连接使用具有 SSL 的 HTTPS 的优势

如果要求所有连接使用具有 SSL 的 HTTPS,即可获得下列优势:

  • Azure DevOps 的应用程序层、数据层和客户端层之间的所有 Web 连接都更安全,因为它们需要证书。

  • 可以通过将证书配置为预期在项目阶段结束时过期来更轻松地控制访问。

支持或要求使用具有 SSL 的 HTTPS 的劣势

在配置 Azure DevOps Server 以支持或要求使用 SSL 的 HTTPS 之前,应考虑以下缺点:

  • 可能会使目前的管理任务变得复杂化。 例如,在应用 Service Pack 或其他更新之前,可能需要重新配置部署来停止支持具有 SSL 的 HTTPS。

  • 必须不仅配置还需要管理证书颁发机构 (CA) 和证书信任。 可以在 Windows Server 2003 和 Windows Server 2008 中使用证书服务,但你可能不希望花费时间和资源来部署安全的公钥基础结构 (PKI) 。

  • 必须花费大量时间来设置和测试这些配置,且你的部署的故障排除会变得更加困难。

  • 如果继续支持这两种协议,如果未适当保护 Azure DevOps 的应用程序层,则外部连接可能不会加密。

  • 如果要求使用具有 SSL 的 HTTPS,部署的性能会变慢。

配置部署以支持或要求使用具有 SSL 的 HTTPS

本主题中的过程介绍了在 Azure DevOps Server 中请求、颁发和分配 SSL 连接所需的证书的一个过程。 如果使用与此主题中描述的软件不同的软件,则可能需要执行不同的步骤。 若要支持与Azure DevOps Server部署的外部连接,还必须在 Internet Information Services (IIS) 中启用基本身份验证和/或摘要式身份验证。

按照本主题中的过程,你将完成以下主要任务:

  1. 获取用于部署Azure DevOps Server及其使用网站的证书。

  2. 安装并分配证书。

  3. 配置Azure DevOps Server。

  4. 配置 Team Foundation Build。

  5. 为 Visual Studio 2013 配置 Release Management

  6. 配置客户端计算机。

先决条件

若要执行本主题中的过程,必须首先满足下列要求:

  • 必须安装 Azure DevOps 的数据层和应用程序层中的逻辑组件,尽管对于Azure DevOps Server本身,不一定进行配置。 这些层包括 IIS、SQL Server以及你可能已集成的任何其他组件,例如 Team Foundation Build 和 SQL Server Reporting Services。

    本主题中的过程是指在 Azure DevOps 的应用程序和数据层中运行逻辑组件的一个或多个服务器。 应用程序和数据层可能在同一台或多台服务器上运行,如Azure DevOps Server安装指南中所述。

  • 你必须具有可颁发证书的证书颁发机构 (CA),或订阅具有受信任的链的第三方认证机构。 此主题假定你使用证书服务作为你的 CA,但是你可以使用你为你的部署配置的任意 CA 或来自受信任的第三方证书颁发机构的证书。 如果没有证书颁发机构,则可以安装证书服务并配置一个证书颁发机构。 有关详细信息,请参阅 Microsoft 网站上的以下文档集之一:

  • 你需要具有管理员身份,才能对部署内的所有组件进行 HTTPS 和 SSL 配置。 如果在分布式部署中工作,其中不同的人员对各个组件具有管理权限,则需要与这些人协调以完成配置。

  • 具体而言,必须属于 Team Foundation 管理员 组,并且必须属于应用程序层、数据层和 Azure DevOps 代理服务器或 Team Foundation 服务器的 管理员 组。

  • 若要配置生成服务器,必须属于该服务器上的 管理员 组。

  • 若要配置Release Management,必须属于承载 Release Management Server 的服务器上的管理员组,并且必须是 Release Management 中发布管理员角色的成员。

  • 如果你的部署使用报告功能,则你必须是管理安全组的成员,或者具有分别为配置报告服务而设置的等效权限。

    有关权限的详细信息,请参阅Azure DevOps Server的权限参考

假设

此主题中的过程假定下列条件为 true:

  • 在安全的环境中安装和部署了数据层和应用层服务器,并根据安全性最佳实践进行配置。

  • 你熟悉如何配置和管理 PKI,以及请求、颁发和分配证书。

  • 你具备开发环境网络拓扑的实践知识,并且熟悉配置网络设置、IIS 和SQL Server。

获得证书

在将 Azure DevOps Server 配置为将 HTTPS 与 SSL 配合使用之前,必须为部署中的服务器获取并安装服务器证书。 要获得服务器证书,必须安装并配置你自己的证书颁发机构,或者使用你信任的外部组织提供的证书颁发机构(第三方证书)。

有关如何安装证书颁发机构的详细信息,请参阅 Microsoft 网站上的下列主题:

请求、安装证书并使用证书配置网站

在证书颁发机构中登记之后,必须通过使用 IIS Manager 请求获得证书,或者在你部署中的下列每台服务器上安装证书:

  • 每台应用层服务器。
  • 每个运行 Azure DevOps 代理服务器的服务器(如果已为部署配置)。
  • 作为生成控制器或生成代理运行 Team Foundation 生成服务的每个服务器(如果为部署配置了任何服务器)。
  • 运行 Reporting Services 的服务器(如果在部署中配置了一台这样的服务器)。

此外,部署中的客户端计算机将需要在证书链中进行注册并请求所需的证书。 如果使用的是 Release Management,这将包含运行 Release Management 客户端的任何计算机,以及发布环境中运行部署代理的任何客户端¹。 如果一个或多个项目使用 Git 进行版本控制,则这些项目中的用户也必须在其计算机上配置 Git,以便识别和使用客户端证书。 有关如何从特定 CA 请求客户端证书的信息,请参阅该证书颁发机构的文档。

¹ 此处分别注明了客户端和服务器,但这只是本文档的一个惯例。 运行部署代理的任何计算机都需要安装该证书。

  1. 打开“Internet Information Services (IIS)管理器” 。

  2. 展开服务器,导航到 “服务器证书”,然后创建并完成证书请求。

    打开 IIS 管理器,然后请求证书

    创建请求,然后完成请求

    有关详细信息,请参阅 在 IIS 中配置服务器证书

  3. 导入证书。

  4. 现在,你需要使用相应的设置配置将需要此证书的每个网站(Release Management 网站除外,你将在稍后进行配置)。 具体来说,你需要对下列网站执行此操作:

    • 默认网站
    • Azure DevOps Server
    • Azure DevOps Server代理 (部署是否使用它)

    在承载要配置的网站的每个服务器上,打开 Internet Information Services (IIS) Manager

  5. 展开“ComputerName”,展开“网站”,打开要配置 (网站的子菜单,例如Azure DevOps Server) ,然后从“操作”窗格中选择“绑定”。

    你必须为所有站点配置绑定

  6. “网站绑定”中,选择“ 添加”。

    此时会显示“添加站点绑定”对话框。

  7. “类型” 列表中,选择 “https”。

    “端口”中,键入其他端口号。

    重要

    SSL 连接的默认端口号为 443,但必须为以下每个站点分配唯一的端口号:默认网站、Azure DevOps Server和Azure DevOps Server代理 ((如果部署) 使用它)。 应记录你配置的每个网站的 SSL 端口号。 需要在 Azure DevOps 的管理控制台中指定这些编号。

    “SSL 证书”中,选择导入的证书,然后选择“ 确定” 并关闭“绑定”页。

    确保选择唯一的端口号

  8. 在要配置的网站 主页 上,打开 “功能” 视图。

  9. “IIS”下,选择“ 身份验证”。

  10. 选择一种要配置的身份验证方法,打开其子菜单,然后根据你的安全需要启用、禁用此方法或对其执行其他配置。 例如,如果要禁用匿名身份验证,你可以选择“匿名身份验证”方法并从“操作”菜单中选择“禁用”。

    选择方法,然后选择要执行的操作

  11. 完成配置后,请重新启动 Web 服务。

配置防火墙

必须将防火墙配置为允许流量通过你刚在 IIS 中指定的 SSL 端口。 有关详细信息,请参阅防火墙文档。

重要

确保从其他计算机测试指定端口上的通信。 如果无法访问默认网站或 Web 门户,请双击 检查在 IIS 中为这些网站指定的端口设置,并确保防火墙已正确配置为允许这些端口上的流量。

配置 SQL Server Reporting Services

如果部署使用报告,则必须配置 SQL Server Reporting Services 以支持使用 SSL 的 HTTPS,并使用在 IIS 中指定的端口进行Azure DevOps Server。 否则,报表服务器无法在你的部署中正常运行。 有关详细信息,请参阅为安全套接字层配置报表服务器 (SSL) Connections

提示

如果你的部署不使用报告,则可跳过此过程。

为 Azure DevOps Server 配置 HTTPS

按照以下步骤使用在 IIS 中为默认网站和Azure DevOps Server网站配置的 HTTPS 端口和值配置Azure DevOps Server部署。

重新配置Azure DevOps Server以使用或要求 HTTPS

  1. 打开 Azure DevOps 管理控制台并浏览到应用程序层节点。

  2. “应用程序层摘要”中,选择“ 更改 URL”。

    更改 URL” 窗口随即打开。

  3. “通知 URL”中,键入在 IIS 中为Azure DevOps Server网站配置的 HTTPS URL。

    例如,你可能已将此网站配置为使用端口 444。 在这种情况下,键入 https:// ServerName:444/tfs。 确保使用服务器的完全限定域名而不是 localhost。

    在地址中指定 HTTPS、服务器和端口

  4. 选择 “测试”。 如果测试未通过,请不要选择 “确定 ”。 返回并确保输入了正确的 URL 和端口信息,所有防火墙均已配置为允许这些端口上的通信,并且该站点在 IIS 管理器中可用并正在运行。

  5. 若要要求 HTTPS,请选择“在服务器 URL中使用”,然后键入为Azure DevOps Server网站配置的 HTTPS URL。

    确保使用服务器的完全限定域名而不是 localhost。

  6. 选择“ 测试”,如果测试通过,则选择“ 确定 ”。

  7. 如果部署使用 Reporting Services,请在管理控制台中选择“报告”。 否则,请跳过此过程中的剩余步骤。

  8. “报表”中,选择 “编辑”。

    如果“ 脱机 ”对话框打开,请选择 “确定”。

    报告 ”窗口随即打开。

  9. 选择“报表”选项卡。在“报表服务器的 URL”中,键入 Web 服务和报表管理器的 HTTPS URL,然后选择“确定”。

测试对部署的访问

你应该测试所做的更改是否能够按照你的预期正常工作。 此步骤是可选的,但我们强烈建议执行。

测试部署访问

  1. 在未承载应用层的计算机上,打开 Web 浏览器并导航到团队主页。

  2. 验证是否可以从 Web 门户(包括管理页面)访问团队和项目。

  3. 如果无法通过 Web 门户访问部署,请查看刚刚完成的步骤,并确保已正确进行所有配置更改。

将部署配置为要求使用 SSL 的 HTTPS (可选)

可以要求Azure DevOps Server应用程序层的所有连接才能将 HTTPS 与 SSL 配合使用。 此附加的安全性是可选的,但建议执行该操作。

要求使用 SSL 连接

  1. 在承载要配置的网站的服务器上,依次选择“ 启动”、“ 管理工具”和“ Internet Information Services (IIS) 管理器”。

  2. 针对你的 IIS 版本执行相应的步骤:

    对于使用 IIS 7.0 的部署:

    1. 展开 “ComputerName”,展开 “网站”,然后选择要配置的网站。

    2. 在该网站的主页上,选择“SSL 设置”。

    3. “SSL 设置”窗格中,选择“需要 SSL 检查” 框。

      (可选) 选中“需要 128 位 SSL 检查” 框。

    4. “客户端证书”中,选择“ 忽略”、“ 接受”或“ 要求”,具体取决于部署的安全要求。

    5. “操作”中,选择“ 应用”。

    6. 对于你希望要求使用 SSL 的每个网站,重复这些步骤。

在生成服务器上安装证书

如果在一台或多台服务器上安装了 Team Foundation 生成服务,则必须在每台服务器的受信任的根证书颁发机构存储中安装证书。 有关详细信息,请参阅本主题前面的 获取证书使用证书请求、安装和配置网站 。 控制器和代理均需要具有私钥的证书,以用于在 HTTPS 连接中进行标识。

注意

要通过 SSL 执行生成,必须在生成控制器和生成代理上的受信任根存储区中安装此证书。

更新生成配置

若要为 SSL 连接配置 Team Foundation 生成,必须将生成服务配置为使用为应用程序层和生成配置支持的集合配置的 HTTPS URL。 必须对配置中的每个生成配置来配置此 URL。

更改生成配置以使用 HTTPS

  1. 在承载要配置的生成配置的服务器上,打开 Team Foundation 的管理控制台。

  2. “Team Foundation”下,展开服务器的名称,然后选择“ 生成配置”。

    此时会显示“ 生成配置 ”窗格。

  3. 在服务配置下,选择 “停止”,然后选择 “属性”。

    此时会打开“ 生成服务属性 ”对话框。

  4. “通信”中,确保项目集合的 URL 使用正确的 HTTPS 地址和完整的服务器名称。

  5. 在“ 本地生成服务终结点 (传入) ”中,选择“ 更改”。

    此时会打开“ 生成服务终结点 ”对话框。

  6. “终结点详细信息”中,验证端口号是否与配置详细信息匹配。

  7. “协议”中,选择“ HTTPS”。

  8. “SSL 证书 ”列表中,选择安装和配置用于此部署的证书,然后选择“ 确定”。

    确保配置详细信息匹配

  9. 在“ 生成服务属性 ”对话框中,选择“ 启动”。

配置客户端计算机

在用户访问 Azure DevOps 的每台客户端计算机上,必须在本地安装证书,并为从该计算机访问 Azure DevOps 的任何用户清除客户端缓存。 否则,用户将无法从该计算机连接到 Azure DevOps。 有关详细信息,请参阅 管理受信任的根证书

重要

对于同时运行 Azure DevOps Azure DevOps Server和一个或多个客户端的计算机,请勿遵循此过程。

在客户端计算机上安装证书

  1. 使用属于该计算机上的 管理员 组的帐户登录到计算机。

  2. 对于本地计算机,将证书安装到受信任的根证书颁发机构文件夹中。

清除客户端计算机上的缓存

  1. 使用要清除其缓存的用户的凭据登录到计算机。

  2. 关闭任何打开的 Visual Studio 实例。

  3. 在浏览器窗口中,打开下列文件夹:

    Drive:\Users\UserName\AppData\Local\Microsoft\Team Foundation\4.0\Cache

  4. 删除 Cache 目录的内容。 确保删除所有子文件夹。

  5. 选择 “开始”,选择“ 运行”,键入 devenv /resetuserdata,然后选择“ 确定”。

  6. 对从该计算机访问 Team Foundation 的每个用户的帐户重复这些步骤。

    注意

    你可能希望将清除缓存的说明分发给所有 Azure DevOps 用户,以便他们可以自行清除缓存。

将客户端计算机连接到重新配置的部署

配置 Git

默认情况下,使用 Git 进行版本控制的项目将无法验证为Azure DevOps Server配置的 SSL 证书。 这是因为与 Azure DevOps Server 和 Visual Studio 不同,Git 无法识别 Windows 证书存储。 相反,它的证书存储使用 OpenSSL。 为了对已配置 SSL 的项目使用 Git 存储库,你需要使用 TFS 2013 部署证书链根目录的证书来配置 Git。 这是一种仅适用于 Git 存储库项目的客户端配置任务。

有关 Git 网络操作在 Visual Studio 2013 中的工作原理的详细信息,请参阅此博客文章

提示

对于其他 Git 凭据管理任务(例如Windows 身份验证),请考虑下载并安装适用于 Git 的 Windows 凭据存储

配置 Git 的证书存储

  • 使用属于该计算机上的 管理员 组的帐户登录到计算机。

  • 如上文所述,确保在计算机上安装和配置所需的证书。

  • 在支持的 Web 浏览器中,将Azure DevOps Server根证书提取为 base64 编码的 X.509 CER/PEM 文件。

  • 创建 Git 根证书存储的私有副本,并将其添加到你的私有用户存储副本。