从Visual Studio 2015发布——允许不受信任的证书

97
我正在从Visual Studio 2015发布我的ASP.NET 5 MVC6项目。我已经从我的服务器导入了发布文件。连接验证成功,但是当我发布我的项目时,出现了以下错误:
ERROR_CERTIFICATE_VALIDATION_FAILED
连接到远程计算机(“XXXXXXXXX”)使用指定的进程(“Web Management Service”),但无法验证服务器的证书。如果您信任此服务器,请重新连接并允许不受信任的证书。
在发布设置中没有允许不受信任证书的选项。

只需清理和验证连接,然后重试。如果之前成功运行过,它将会起作用。 - user8123187
11个回答

144

当前工具尚不支持允许不受信任的证书选项,希望很快能够更新。但是您可以手动设置。

  1. 在文本编辑器中打开位于 /Properties/PublishProfiles 内的发布配置文件 (.pubxml)
  2. <PropertyGroup> 元素内将 AllowUntrustedCertificate 设置为 True (<AllowUntrustedCertificate>True</AllowUntrustedCertificate>) 或者如果不存在则添加
  3. 将 UsePowerShell 设置为 False (<UsePowerShell>False</UsePowerShell>).

在撰写时,生成的 PowerShell 脚本忽略了 AllowUntrustedCertificate 属性,这可能是一个 bug,因此需要将其设置为 False。

如果您更新 .ps1 文件中的模块版本,也可以解决 PowerShell 的问题。

另外,您还可以通过在本地“信任”服务器证书来解决此问题。


1
谢谢您先生。它解决了我的原始问题,但现在我又遇到了另一个错误:ERROR_USER_UNAUTHORIZED。“Web部署任务失败。(使用Web管理服务连接到远程计算机(XXXX),但无法授权。”凭据是正确的,我认为这是权限问题。您能否给我一些关于如何解决新错误的见解? - koryakinp
用户是否是服务器的管理员? - Dealdiane
是的。用户是服务器管理员。 - koryakinp
恐怕有太多的变量,很难将其缩小到具体的问题。通常,如果用户是管理员,“它只是工作”。我建议您创建另一个问题。提供尽可能多的细节,也许更熟悉该错误的人可以加入并更好地帮助您。同时,请查看此链接。向下滚动到底部,确保不要错过“故障排除常见问题”一节。 - Dealdiane
1
你能提供一些关于本地“信任”服务器的信息链接吗? - Serj Sagan
显示剩余5条评论

47

针对 .NET Core 1.0,您需要添加标签

 <AllowUntrustedCertificate>True</AllowUntrustedCertificate>

在您的.pubxml文件中发布配置文件


21

我已经设置了<UsePowerShell>True</UsePowerShell>,但仍然会失败并显示证书错误。

  • 我在设置对话框中重新输入了密码,但仍然失败了
  • 当我点击验证连接后,它开始工作了。

发布设置对话框

注意:

  • VS 2017 (15.2)
  • 我的密码最近更改了
  • 作为一个测试,我输入了错误的密码,然后我得到了证书错误,所以证书错误显然不仅仅是关于未受信任的证书

2
只是来这里发布相同的解决方案。打开发布设置对话框,通过单击“验证连接”重新验证连接,重新保存配置文件,然后再次点击部署 - 这样每次都可以解决证书问题,但我必须每次重新启动 VS 时都要这样做 - 可能是个漏洞。 - Levi Fuller
1
感觉肯定是个bug!谢谢你的留言@LeviFuller - spottedmahn
1
太棒了!这对我也有效。是的,看起来这是一个错误:https://developercommunity.visualstudio.com/content/problem/64779/web-deploy-could-not-verify-servers-certificate.html - pcdev
据说这个问题已经在VS 2017更新3中得到解决。感谢@pcdev提供的链接。 - spottedmahn
第二个开发者社区问题报告: 发布 Web 应用程序 -> 无法验证服务器证书。他们说这个问题已经在15.5版中解决了,但我在16.1.0 Preview 3中仍然遇到了同样的问题。 - spottedmahn

19

对于我来说,解决方案在发布配置文件的xml中只需要4行。

<AllowUntrustedCertificate>True</AllowUntrustedCertificate>
<UseMsDeployExe>true</UseMsDeployExe>
<UserName>myuser</UserName>
<Password>mypass</Password>
UseMsDeployExe会更改错误以忽略证书,但不会对用户进行身份验证,这就需要提供目标机器的用户名和密码。

在PowerShell脚本中不需要做任何更改。


1
这是我在数千次搜索和尝试之后的工作版本。 - Alina
1
在VS 2017.2中,这是我唯一有效的方法。 - Dylan
1
在使用这个可行的方法后,我找到了一种方法来使它工作,而不需要将密码以明文形式存储在配置文件XML中,请参见:https://dev59.com/wVwX5IYBdhLWcg3wjwJZ#45997156 - ArieKanarie
1
使用Web API 2进行开发。无需将密码存储在profile.xml文件中。关键是使用UseMsDeployExe。我更喜欢在发布时在窗口提示中输入它。谢谢。 - Juan R
1
我花了几天时间解决这个问题,这是我找到的唯一修复问题的方法。 - ccoutinho
1
只添加 <UseMSDeployExe>True</UseMSDeployExe> 标签就行了,不需要其他三个标签。 - Josh Noe

4
将以下这行代码添加到您的发布配置文件中,该文件的路径如附图所示。
<AllowUntrustedCertificate>True</AllowUntrustedCertificate>

enter image description here


1
谢谢您提供的截图,我一直在想这些属性位于哪里。 - user11328958

2

更新

在使用VS2015或VS2017 community部署.NET Core应用程序到远程IIS服务器时,请使用以下方法:

<UsePowerShell>True</UsePowerShell> 

不是

<UsePowerShell>False</UsePowerShell>

发现部署过程已成功完成,但在将标签更改为true之前,未将任何文件复制到服务器。

希望这能帮助某些人。


1
这里似乎有矛盾。你先说要将标志设置为true,但又说除非标志为false,否则不会复制任何内容。你能澄清一下吗? - crthompson
感谢您的观察 @paqogomez。请使用 <UsePowerShell>True</UsePowerShell>。我评论中的最后一句话是一个打字错误。再次感谢。 - Daniel Adigun

2

对于在VS 2019中使用的dotnet 3.1.0,只需进入“编辑”配置文件 -> 验证连接 -> 接受证书即可完成。


1
是的,但它似乎不是一个永久的解决方案;它只适用于当前会话。 - Bozhidar Stoyneff

1

另一个解决方案

我在远程IIS上创建了发布设置,并在Visual Studio 2017(15.2)中导入了它们。 之后,我更改了URL以指定站点名称,因为IIS用户只能访问特定站点(感谢this在SO上的答案)。 我通过UI输入了凭据,无需将密码存储在配置文件中。

我的配置文件如下:

<WebPublishMethod>MSDeploy</WebPublishMethod>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<SiteUrlToLaunchAfterPublish>https://some.site.com:443/</SiteUrlToLaunchAfterPublish>
<LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
<ExcludeApp_Data>False</ExcludeApp_Data>
<PublishFramework>netcoreapp1.1</PublishFramework>
<ProjectGuid>eecf975e-f2e6-440f-bfd6-a0a63c25e3c3</ProjectGuid>
<MSDeployServiceURL>https://url.toourserver.com:8172/msdeploy.axd?site=some.site.com</MSDeployServiceURL>
<DeployIisAppPath>some.site.com</DeployIisAppPath>
<RemoteSitePhysicalPath />
<SkipExtraFilesOnServer>True</SkipExtraFilesOnServer>
<MSDeployPublishMethod>WMSVC</MSDeployPublishMethod>
<EnableMSDeployBackup>True</EnableMSDeployBackup>
<UserName>IISUserName</UserName>    
<AllowUntrustedCertificate>True</AllowUntrustedCertificate>    
<_SavePWD>True</_SavePWD>

"

<AllowUntrustedCertificate> 是必需的,因为我的计算机不信任自签名证书。

使用此配置文件,根据 IIS 中的设置进行备份,更新站点,并在进程完成时在浏览器中打开站点 :-)

尽管这里的所有其他答案也使其工作,但我认为分享这种方式很好,因为它只涉及少量更改(AllowUntrustedCertificate),而且不会存储明文密码。

"

0

0

另外还有一个解决方案

我在使用VS2019部署Azure Web Jobs时遇到了同样的问题。请查看我的答案这里以获取更多详细信息。


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