在Visual Studio中启用SSL

37
我已在Visual Studio中启用了SSL,如下所示:

enter image description here

我也设置了以下内容:

enter image description here

当我通过IE访问网站(通过Visual Studio调试)时,我看到这个:

enter image description here

当我通过Firefox(通过Visual Studio调试)访问网站时,我看到这个:

enter image description here

无论是在Firefox还是IE中,都没有进入网站的选项。我已经花了一整天的时间试图理解问题出在哪里。我做错了什么?


你有证书吗?我猜测你使用的是自签名的SSL证书(不可信任的),因此浏览器会阻止你打开页面。当你点击“了解更多”时,尽管证书不安全,你也应该能够打开页面。 - pwas
@nopeflow,您如何在Visual Studio中配置证书? - w0051977
啊,我明白了,所以还有其他问题。 - pwas
@nopeflow,你有什么想法吗? - w0051977
@w0051977:查看 %USERPROFILE%\Documents\IISExpress\config\applicationHost.config。可以手动编辑配置。此外,文章中描述了 "%ProgramFiles%\IIS Express\IisExpressAdminCmd.exe"(请参见“附录 Z”),该实用程序简化了 SSL 配置的某些步骤。 - Oleg
显示剩余16条评论
5个回答

83

我经常在使用SSL时遇到这个确切的问题,并发现(特别是在团队环境中处理别人的项目时)Visual Studio项目Web设置(SSL端口)有时会出现问题。以下是我解决它们的方法:

  • 在解决方案资源管理器中,单击你的项目。
  • 按F4键(查看属性)。
  • 复制URL(不要复制SSL URL)。
  • 将URL粘贴到Web选项卡上的项目URL中,保存。
  • 在解决方案资源管理器中,单击你的项目。
  • 按F4键(查看属性)。
  • 将SSL启用更改为false。
  • 将其更改回true。应该会有一个新的SSL URL。将其复制。
  • 将新的SSL URL粘贴到Web选项卡上的项目URL中。单击创建虚拟目录。
  • 单击覆盖应用程序根URL,并粘贴SSL URL。保存。

这总是解决我的问题。


谢谢,这解决了我的问题,在和VS挣扎了1个小时后。 - Mosia Thabo
谢谢。你帮助我避免了这个问题的困扰。 - Richard Dias
这个问题让我解决了好几个小时。谢谢! - Ricky
由于现代浏览器强制要求SSL,而IE正在被淘汰,这是非常宝贵的信息。非常感谢您 - 这为我节省了一些时间来升级一些遗留应用程序。 - Craig
这解决了我的问题,我已经花了几年时间在这个断断续续的项目上摸索,最后这一次我终于受够了,找到了这个。非常感谢! - YtramX

44

假设你有一个.NET MVC或Web API项目,并且想要在SSL上运行它。换句话说,你希望在类似于https://localhost:xxxx的URL上启动该项目。

第一步很简单。只需在解决方案中选择MVC/Web API项目名称,并在属性窗口中找到名为“SSL Enabled”的属性:

Enable SSL in Visual Studio properties window

同样的属性窗口还将显示应用程序的 HTTPS URL。在上面的例子中,它是 https://localhost:44300/。复制该URL并转到项目属性窗口。找到Web选项卡,并覆盖项目URL属性为https地址:

Override project url to https

启动应用程序。您可能会在浏览器中收到一条消息,提示本地主机地址不受信任,您可以自行承担风险继续访问网站。以下是一个瑞典语的 Chrome 示例:

Localhost is not trusted

问题在于Visual Studio自动为您安装的证书不受信任。您可以在证书管理器中的计算机级别证书的个人文件夹中找到该证书:

localhost certificate in certificates snap-in

如果你双击证书,你会发现它不被信任:

localhost certificate is not included among trusted certificates

该消息还提供了解决方案:证书必须导入到受信任的根证书颁发机构文件夹中。您会在同一快捷菜单下“个人”文件夹的下方看到它作为一个文件夹。那么我们该怎么做呢?
导出: 右键单击证书 从上下文菜单中选择“所有任务” 选择“导出…” 在证书导出向导上单击“下一步” 保持“不要导出私钥”选项不变,然后单击“下一步”。 接受下一个屏幕上的默认设置,即“DER 编码二进制 X.509”应该保持选中状态,然后单击“下一步”。 为导出的文件提供名称和位置。将其命名为“localhost”,并将其保存在您可以轻松找到的位置。 单击“下一步”和“完成”。
应该会弹出一个消息提示框,显示导出成功。
导入:
  • 接下来右键点击名为“受信任的根证书颁发机构”的文件夹,选择“全部任务”
  • 从上下文菜单中选择“导入…”
  • 在证书导入向导中保持“本地计算机”选项不变,然后单击“下一步”
  • 浏览到您刚刚保存的证书。
  • 单击“下一步”并接受所有默认值,直到您到达向导的末尾。

应该会出现一个消息,说明导入成功。

如果现在回到个人存储并双击本地主机证书,那么您应该会看到它已被信任:

localhost certificate is now trusted

好的,让我们重新开始.NET Web项目,打开页面时不应出现任何警告。如果您仍然看到相同的问题,请在全新的浏览器会话中进行测试,例如在IE中:

localhost is loaded in browser without issue

您还可以从浏览器窗口查看提取的证书。这是IE的一个示例:

Certificate details from internet explorer


2
你知道如何在Visual Studio for Mac(Xamarin)中完成这个任务吗? - Matt W
将https地址添加到属性窗口后,我就进入了重点,然而当我运行时只能得到502错误。 - Chris Surfleet
1
抱歉 @MattW,我不知道如何在MAC上完成它。 - Ahmad Hamdy
这个对我有用,但需要注意的是Properties窗口不是通过右键点击项目并选择“属性”获得的那个窗口。您需要另一个Properties窗口。我无法找到在选定项目时打开它的方法,但如果您右键单击任何其他文件并选择属性,则可以打开正确的窗口。然后导航回到项目将更新该Properties窗口以显示SSL设置。 - Brad Irby
如果我收到“本地主机不受信任”的错误提示,但证书是有效的,该怎么办? - fballer87
@BradIrby和需要的任何人,在选择项目时只需按F4。 - alfoks

5

@MattW 我使用的是Mac,在macOS Catalina上使用Visual Studio 2019 for Mac,并遇到了这个问题。我打开了我的项目的“Project Options”,在ASP.NET Core的默认运行配置下的“App URL”中将“HTTP”更改为“HTTPS”。

屏幕截图:VS 2019 for Mac中的项目选项

我已经拥有了用于本地主机的自签名证书,所以Visual Studio给我显示了一个消息框,要求我从Keychain使用该开发证书。它要求我的密码并使用了该证书。应用程序在“HTTPS”下无任何问题。

屏幕截图:发现开发证书的消息

如果您没有开发证书,可以使用以下命令在Mac中生成一个:

dotnet dev-certs https --clean
dotnet dev-certs https --trust

请参考https://learn.microsoft.com/zh-cn/aspnet/core/security/enforcing-ssl?view=aspnetcore-3.1&tabs=netcore-cli了解更多信息。


完美运行,并且仍然可以在.NET 6 Minimal API和VS2022中使用!谢谢。 - Cydaps

3

如果你有一个带有全球图标的Web站点项目,启用SSL与带有矩形中的全球图标的Web应用程序项目略有不同,其他答案适用于此。

Web站点项目没有Web选项卡。相反,从项目属性(F4)中复制SSL URL到项目属性页面(Shift F4)中的启动URL。这一步是可选的,但如果不这样做,你将不得不在浏览器中手动输入SSL端口号。

此外,对于任何类型的Web项目,在属性中输入的端口号并不真正重要。最简单的方法是接受VisualStudio默认填充的数字,但是另一个空闲端口号同样有效。

当然,你将使用自签名证书,即由VS签名。因此,浏览器可能会对此发出警告,并且为了使用SSL调试你的项目,你必须在浏览器中接受异常。


仍然适用于2021年,因为我正在处理遗留的Web应用程序以启用ADFS身份验证!谢谢 - Jamie

2

当我的IIS本地开发证书过期时,就会出现这个问题。我从这里找到了解决方案。

  • 删除已安装的开发证书(运行MMC.exe,使用名称“localhost”进行“查找证书”,然后删除过期的证书)。

  • 清除SSL状态(控制面板 -> Internet选项 -> 内容 -> 清除SSL状态)。

  • 安装新的开发证书(在命令窗口中运行dotnet dev-certs https --trust)。


我甚至不需要安装新的开发证书 - Visual Studio自动为我完成了这个步骤 - 但是SSL状态仍然被缓存,所以你的第二步起到了关键作用。谢谢! - oflahero

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接