Visual Studio 2017出现“将证书添加到受信任的根证书存储失败,错误信息如下”

64
我正在尝试以SSL模式运行ASP MVC应用程序,每当我运行应用程序时,我都会收到提示以信任IIS Express SSL证书。点击是后,它会给出错误消息“将证书添加到受信任的根证书存储失败,出现以下错误。拒绝访问”。我正在以管理员模式运行我的Visual Studio 2017。我还通过转到MMC删除了本地主机证书。 是否有其他人遇到过这个问题。

Error Screenshot

解决方案:这是对我有用的方法。删除所有本地主机证书。在添加/删除程序中运行修复IIS Express。将本地主机证书从个人/证书复制并粘贴到受信任的根证书,然后它不再报错。


你可以使用 Jexus Manager 来完成相同的操作,https://JexusManager.com - Lex Li
@LexLi 谢谢,但我希望它能够与现有系统一起工作。 - sanjeev
是的,它对我起作用了。https://stackoverflow.com/questions/56276414/how-to-fix-the-access-control-list-acl-structure-is-invalid/57941558#57941558 - Krishna M
2
使用Visual Studio 2019 - 它会将localhost证书放置在Personal/Certificate中。只需按下Windows键=>运行=>MMC=>插入证书。删除受信任的根证书中的localhost证书,然后将Personal/Certificate中的localhost拖动到受信任的位置即可。感谢其他答案,但现在似乎更简单了。 - LukeT
移除本地证书,然后重新安装IIS Express对我有用。 - kpr
很好,它对我起作用了。 - Daniel Gregatto
15个回答

35

注意:将问题中原作者的解决方案添加为答案。

这是对我有效的方法。删除了所有本地主机证书,运行“Add/Remove Programs”中的IIS Express修复程序。将localhost证书从“Personal/Certificate”复制并粘贴到“Trusted Root Certificates”,就不会再有错误提示了。

重新安装/修复IIS Express似乎无法真正解决此问题(截至IIS Express 10),真正的解决方法是将本地主机证书添加到受信任的根证书。

如何执行此操作的详细信息已在以下博客文章中介绍:https://blogs.iis.net/robert_mcmurray/how-to-trust-the-iis-express-self-signed-certificate

总之,

  • 通过控制面板中的“管理计算机证书”或在cmd提示符中运行certlm打开证书管理器
  • 在“个人”>“证书”下导出本地主机证书并保存到磁盘
    • 不要导出私钥!只导出公钥。
  • 在“受信任的根证书颁发机构”下,右键单击“证书”并导入刚刚导出的证书

26

对我来说,只需要运行CMD > certlm并删除个人文件夹内的本地主机证书即可。


8
这是让我感到尴尬作为微软开发人员的事情。 - Nicholas Franceschina
大多数情况下,您甚至可以直接从软件包管理器中完成此操作。最简单的解决方案加1。 - Ross Brasseaux

18

在终端中运行:

dotnet dev-certs https -c

这将让您知道是否有任何有效的自签名证书。

然后,您可以运行:

dotnet dev-certs https --check --trust

这将让你知道是否有任何可信的自签名证书。

如果你有过期或不受信任的开发证书,你可以运行:

dotnet dev-certs https --clean

这将删除证书。

如果您想添加证书/受信任的证书,则可以运行以下命令

dotnet dev-certs https --trust

这将创建一个自签名证书并尝试将其添加到“受信任的根证书颁发机构”文件夹中。

如果失败了,则需要手动将证书添加到“受信任的根证书颁发机构”文件夹中。

手动添加证书:

  1. 第一步是在Windows的“此处输入以搜索”部分键入“运行”,一旦打开运行,键入“mmc”,然后点击确定。这将拉起控制台根。

  2. 然后您必须单击:文件 -> 添加/删除快照 -> 证书 -> 添加,然后单击确定。这将带您进入当前用户的证书。

  3. 展开个人文件夹,然后单击证书文件夹。 滚动直到找到一个名为“localhost”的证书

现在你可以尝试将localhost文件复制并粘贴到“受信任的根”文件夹中。如果成功,则完成!您可以通过运行以下命令来验证是否已工作:

   dotnet dev-certs https --check --trust.
如果仍然存在不受信任的证书问题,您需要按照以下步骤操作:
  1. 右键单击本地主机证书,然后单击“所有任务”,再单击“导出…”。我们需要先将证书导出,然后才能将其导入到“受信任的根证书颁发机构”文件夹中。

  2. 按照证书导出向导进行操作。您不需要更改默认设置,只需一直单击“下一步”,直到达到“要导出的文件”屏幕。单击“浏览”,并选择桌面作为目的地,并将文件命名为“localhost”。单击“下一步”,然后完成。这将在桌面上创建一个名为localhost.cer的文件。

  3. 现在,在桌面上双击localhost.cer文件。弹出窗口应该出现,请单击其中的“安装证书…”按钮。

  4. 确保将存储位置设置为“本地计算机”,然后单击下一步。

  5. 然后选择“将所有证书放入以下存储区”,单击“浏览”,然后选择“受信任的根证书颁发机构”,最后单击“完成”。

最后一步是确保证书现在已被信任,因此在终端窗口中运行以下命令:

 dotnet dev-certs https --check --trust

您应该收到一条回复,显示:找到了受信任的证书。这意味着您可以继续进行!

您不再需要桌面上的证书,因此可以删除该文件。


这让我达到了大部分我需要的地方。对我来说唯一的问题是选择个人文件夹,右键单击查看>选项,然后选择物理证书存储。在那之后我就能够进行导入了。但感谢@William发布这篇文章,它对我帮助很大。 - TrevorGoodchild

8

在使用Win 10和Visual Studio 2019 Community Edition版本16.1.1的过程中,我尝试了各种解决方案,经过一周的努力终于解决了以下问题:

  • 默认情况下,IISExpress 10的本地主机证书安装在:Certificates(本地计算机)->Personal

enter image description here

  • 修复IISExpress 10(程序 -> 程序和功能)将创建新的本地主机证书,也位于:Certificates(本地计算机)- > Personal

  • 然后通过以下方法将该证书导出到文件中:

enter image description here

然后将该证书导入到:Certificates(本地计算机)- > Trusted Root Certification Authorities

enter image description here

  • 然后,如user2988031所指出:从Certificates(本地计算机)- >Personal中删除证书

我还尝试使用“dotnet dev-crts https --trust”,但它对我没有用,并且始终产生以下错误:

enter image description here

因此,总之,确保只有一个位于Certificates(本地计算机)- > Trusted Root Certification Authorities中的本地主机证书

更新:我刚刚意识到,在多次修改Web应用程序后,出现了不同的错误,我不得不重新完成整个过程才能使其正常工作!


5

这是我的第一次回答。我使用这种方法解决了这个问题。

  1. 在开始菜单中输入“证书”,您将看到选项(管理计算机证书)而不是(管理用户证书)。查看图片
  2. 然后转到个人 -> 证书,找到本地主机。

  3. 将本地主机拖到可信根证书颁发机构 -> 证书中。

  4. 现在结构列表问题已解决,因为一开始它不允许在用户证书中导入。

  5. 因此,现在再次输入证书,但不要选择“管理计算机证书”,而是选择管理用户证书,并将其从个人文件夹拖放到受信任的根证书颁发机构 -> 证书文件夹。

注意:如果您从个人中删除了本地主机,则只需通过首先在Chrome上打开Visual Studio项目,在地址栏左侧查看证书详细信息,然后导出该证书并将其导入个人 -> 证书文件夹即可。


这对我很有效,而且我更喜欢它,因为它不像其他答案那样涉及到删除证书。 - Caleb Seadon
非常感谢您,先生。对于Visual Studio 2019,它对我很有用。 - lashja

3

我是一个完全的新手,经过一段时间的努力和阅读许多帖子后,我想分享我找到的解决方案。它与sanjeev发布的非常相似,但更详细,因此如果您是新手(像我),则可以更快地解决它。

如果您在Visual Studio 2019和Win 10上遇到此问题,请在MMC中删除所有本地主机证书: (1)在cmd>以管理员身份运行>键入“mmc”并按Enter。 (2)文件>添加/删除快捷方式... (3)选择“证书”,然后单击添加按钮 (4)选择“计算机帐户”和“本地计算机”选项 (5)单击并扩展“证书”下的控制台根文件夹 (6)删除不同文件夹中的所有本地主机证书

然后在控制面板>程序和功能中找到IIS 10.0 Express,并在列表中右键单击并选择“Repair”。这将在证书的“个人”文件夹(在先前使用的MMC窗口中)创建一个新的本地主机证书 - 不要忘记刷新以查看此新证书

复制(右键单击证书)位于“个人”文件夹中的此证书,并将其粘贴到文件夹“受信任的根证书颁发机构”>“证书”中

从“个人”文件夹中删除本地主机证书。应该只有一个本地主机证书,位于“受信任的根证书颁发机构”文件夹中

完成上述步骤后,它应该可以正常工作,希望您会发现这很有用


1
在ASP.NET 6 Core项目中,我尝试了这里发布的许多答案,但都没有成功。最终,我找到了this MS Learn article
严格按照该教程操作似乎最终修复了问题。不确定为什么最终结果与这里一半的建议不同,但当其他方法无效时,它确实起作用了。
注意:在第4c步骤中,我需要单击“浏览”并选中“显示物理存储”,然后选择“受信任的根证书颁发机构”的“本地计算机”子文件夹,否则导入将再次失败并显示“拒绝访问”。

0
我尝试了你提供的所有解决方案,但都没有使其正常工作。其中一个立即生效的解决方案是以管理员身份打开PowerShell,并运行以下命令:它会删除所有旧的本地主机密钥,添加新的密钥并将它们添加到受信任的根证书文件夹中。
$cert = New-SelfSignedCertificate -DnsName "localhost", "localhost" -CertStoreLocation "cert:\LocalMachine\My" -NotAfter (Get-Date).AddYears(5);
$thumb = $cert.GetCertHashString();

For ($i=44300; $i -le 44399; $i++) {
    netsh http delete sslcert ipport=0.0.0.0:$i
};

For ($i=44300; $i -le 44399; $i++) {
    netsh http add sslcert ipport=0.0.0.0:$i certhash=$thumb appid=`{214124cd-d05b-4309-9af9-9caa44b2b74a`} 
};

$StoreScope = 'LocalMachine';
$StoreName = 'root';

$Store = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Store -ArgumentList $StoreName, $StoreScope; $Store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadWrite);
$Store.Add($cert);

$Store.Close();

来源:https://steffbeckers.eu/blog/iis-express-localhost-ssl-certificate-reset


0

我的错误实际上是“未安装asp.net开发人员证书”,但我认为以下解决方案在这种情况下仍然有效。请在命令提示符中执行以下命令。

dotnet dev-certs https --trust --check
echo Trust check: %errorlevel%
dotnet dev-certs https --trust -ep "%APPDATA%\ASP.NET\https\TestCert.pfx" -p TestPassword
echo Trust/Export: %errorlevel%

参考: https://github.com/Microsoft/DockerTools/issues/147#issuecomment-420433974


0

您可以使用PowerShell将证书从个人存储区移动到受信任的(根)存储区。

$cert = (Get-Childitem cert:\LocalMachine\My | Where-Object { $_.subject -eq 'localhost' }).Thumbprint
copy-item -path cert:\LocalMachine\My\$cert -Destination cert:\LocalMachine\Root\

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