Visual Studio 2017 - 解决 IIS Express 的 SSL/TLS 连接问题
概括
构建启用HTTPS的 ASP.NET Web 项目有助于确保网站的真实性、客户端和网站之间交换的数据的完整性以及保护用户与网站的交互免受窥探互联网服务提供商和第三方窥探者的侵害。
生产网站使用 HTTPS 依赖于证书颁发机构颁发的受信任的公钥证书。这些证书由CACert.org和Let's Encrypt等专业商业企业或非营利组织颁发。
使用 Microsoft Visual Studio 构建网站的开发人员可以创建本地证书以提供 HTTPS 功能。Visual Studio 包含IIS Express,这是专为满足开发人员需求而设计的“轻量级” Internet Information Server 版本。
具体来说,IIS Express:
不需要本地机器的管理员权限,这为在开发工作站的用户权限受到限制的企业环境中工作的开发人员提供了便利。
从 Visual Studio 运行 Web 项目时自动运行,从 Visual Studio 停止或关闭浏览器时关闭。
*支持编辑和重新加载以及 Visual Studio 中包含的其他调试和开发功能。
可以从命令行运行,而无需运行 Visual Studio。
当 IIS Express 处理请求时,在命令窗口中实时显示完整的 HTTP 服务器日志。
请注意,IIS Express 10是最新版本,随 Visual Studio 2017(所有版本,包括 Community)一起提供。IIS Express 10也可单独下载。docs.microsoft.com和IIS.net上的 IIS Express 文档可追溯到2010年至 2013 年,涵盖 IIS Express 版本 7.5 和 8.0。经验表明,许多信息仍然适用于版本 10。
识别问题
当 IIS Express 与 Visual Studio 一起安装时,安装过程会创建一个 IIS Express 开发证书,该证书可用作在本地计算机上的 IIS Express 上运行的网站的 HTTPS 证书。此证书的有效期为证书创建之日起五年。
当 IIS Express 开发证书未正确绑定到端口或证书已过期或证书安装不正确时,使用 HTTPS 连接到在 IIS Express 中运行的网站将会失败。
HTTPS 失败的常见浏览器错误消息包括:
This site cannot provide a secure connection
localhost sent an invalid response
err_ssl_protocol_error
This web page is not available ERR_CONNECTION_RESET
您收到的具体错误消息取决于您用于调试的浏览器版本。
开始之前
本指南提供了一种方法来解决使用 IIS Express 开发 Web 服务器运行 ASP.NET Web 项目时遇到的 SSL/TLS 连接问题。它面向当前版本的 Visual Studio(截至撰写本文时)。尚未测试它与以前版本的 Visual Studio 或 IIS Express 的兼容性。
最重要的是,本指南适用于使用自动端口配置进行 Web 项目的开发人员。Visual Studio 会为本地计算机 (localhost) 上的 HTTP 和 HTTPS 项目分配唯一端口,并在各个位置同步此信息。除非您有充分的理由分配特定端口,否则最好不要管它,这样会更方便。
本指南还基于自动创建自签名证书以供开发使用。如果您出于任何原因需要使用特定证书,则本指南中的说明不适用于您。
此外,我们无法知道您的系统配置方式是否会对按照此处记录的步骤操作的结果产生不利影响,或者这些说明对于特定配置是否不完整或不准确。
先决条件
- Visual Studio 2017(版本 15.3.4 或更高版本)
- IIS Express 10
- Google Chrome 版本 60+(如果使用 Chrome 进行调试)
建议准备
在开始之前,您可能需要执行以下操作以确保可以从任何不可预见的后果中恢复:
签入您的代码并将其发布到远程存储库。
创建当前备份或将您的本地数据文件夹与云端驱动器同步。
拥有当前备份总是好的,并且有多种服务可以使这样做变得简单且便宜。
解决问题
PluralSight 和作者对遵循这些说明的可靠性、准确性和效果不承担任何责任。使用时请自担风险。
配置准备
如上所述,这些指令的使用存在一些限制:
IIS Express 将自动分配端口号。
localhost是 IIS Express 主机的服务器名称(而不是机器名称)。
尽管 IIS Express 可以托管或php项目,但本指南并未涉及它们。
Google Chrome 版本
Google 在版本 58 中对处理 SSL 证书的方式进行了重大更改。他们与 Microsoft 合作解决了版本 60 中的差异。最近许多与使用 Visual Studio 和 Chrome 进行 SSL 调试相关的问题报告都来自此问题。
在继续此解决方案之前,请检查您的 Chrome 版本号并确保它为 60 或更高版本:
菜单>帮助>关于 Google Chrome(Alt >向下箭头> e > g)
SSL 端口分配
IIS Express 保留了有限数量的端口用于自动 SSL 绑定。请确保您在以下范围内的端口上运行(或尝试运行)SSL 连接:
44300 to 44399 (inclusive)
如果您正在运行最新版本的 Chrome(或 Edge 或 Firefox 或 Opera)并且使用有效的 SSL 端口号但仍然收到错误,请继续执行本指南中介绍的过程。
重置本地证书
以下说明基于这样的前提:您希望您的开发环境能够自动执行尽可能多的常规重复任务。因此,这些说明旨在通用化和自动化 Visual Studio 和 IIS Express。
这些说明还基于这样一个前提:重新开始往往是解决问题和防止将来出现问题的最佳方式。因此,这些说明旨在通过删除任何现有证书并创建一个可成功绑定到相应端口的新证书来完全重置您的 IIS Express 开发证书。
作者注:如果您的开发环境不满足此解决方案的先决条件,或者您有其他限制阻止您遵循这些说明,我希望您仍然能够从下面提供的信息中获得一些价值。
删除本地证书

添加证书管理单元。
**File** > **Add or Remove Snap-ins** > **Certificates** > **Add**
单击“添加”时,将出现一个对话框来选择帐户:
选择“我的用户帐户”,然后单击“完成”。
在控制台根目录 / 证书 - 当前用户 / 个人 / 证书下,找到颁发给列中的值为localhost 的任何证书(大多数情况下不应该有)。选择证书,右键单击,然后选择删除。
在控制台根目录 / 证书 - 当前用户 / 受信任的根证书颁发机构 / 证书下,找到颁发给列中的值为localhost 的任何证书。选择证书,右键单击,然后选择删除。
将会有一个很长的证书列表。颁发给localhost的某些证书可能是当前有效的,也可能已过期。删除所有证书:目的是消除与下文描述的 IIS Express 修复过程结果的潜在冲突。
关闭 Microsoft 管理控制台。
重新打开 Microsoft 管理控制台(从您之前打开的命令窗口中的命令提示符)并添加证书管理单元。这次,在证书管理单元对话框中选择计算机帐户,然后单击完成。
您将看到一个对话框:
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~