创建用于测试 localhost 的自签名证书并使其被浏览器接受
Posted
技术标签:
【中文标题】创建用于测试 localhost 的自签名证书并使其被浏览器接受【英文标题】:Create self signed certificate for testing localhost and have it accepted by the browsers 【发布时间】:2017-12-12 18:40:39 【问题描述】:我已经尝试了数周来让这个自签名证书在多种浏览器(Chrome、Firefox、Edge、IE)中工作。
我设法创建了证书并将其安装为trusted root certificate
,但在每个浏览器中我都必须绕过安全性才能拥有测试环境(带有 xampp 的网站)。
今天我专注于 Edge 和 IE(没有成功),由于 chrome 的程序略有不同,我明天会尝试使其在 chrome 中工作。
我尝试创建一个新的,并复制一个旧的(工作的),这样:
要创建新证书,请以管理员身份打开 powershell,然后:
New-SelfSignedCertificate -DnsName "127.0.0.1", "localhost" -CertStoreLocation "cert:\LocalMachine\My"
按照description 中的说明导出。
为了克隆,我使用了documentation中的示例。
然后我使用certlm.msc
将证书导入到“受信任的根证书”中。
但我得到了错误代码DLG_FLAGS_INVALID_CA
和
DLG_FLAGS_SEC_CERT_CN_INVALID
在 Edge 和 IE 中。
有人知道使这项工作正常进行的程序吗? 我一直在网上寻找,但没有找到。
【问题讨论】:
您可以尝试使用 OpenSSL。如果这样做,请避免使用CN=www.example.com
。主机名始终位于 SAN 中。如果它出现在 CN 中,那么它也必须出现在 SAN 中(在这种情况下您必须列出两次)。有关更多规则和原因,请参阅 How do you sign Certificate Signing Request with your Certification Authority 和 How to create a self-signed certificate with openssl? 您还需要将自签名证书放在适当的信任库中。
【参考方案1】:
我正在尝试做类似的事情并且确实得到了以下工作:
New-SelfSignedCertificate -certstorelocation cert:\localmachine\my -dnsname localhost -FriendlyName "Dev localhost" -NotAfter (Get-Date).AddMonths(240) -TextExtension @("2.5.29.37=text1.3.6.1.5.5.7.3.1")
“NotAfter”参数将证书延长至 20 年。 “TextExtension”参数仅配置“服务器身份验证”的证书。没有这个,它默认为客户端身份验证+服务器身份验证。我没有研究过,但客户端身份验证似乎会导致问题(这很奇怪,因为大多数在线示例都没有提到它;我只发现 one 有)。
这将在 LocalComputer\Personal 和 LocalComputer\Intermediate 证书颁发机构中创建证书。它还允许您在 IIS 中选择证书。
为了实际运行站点,证书需要进入受信任的根证书颁发机构。为此,您可以导出/导入证书或导航到 IE 中的站点,单击红色安全区域并通过屏幕导入证书。上面的链接显示了导入/导出方法。
最后的笔记:
我不得不关闭/重新打开 IE (11.726.15063) 才能让安全提示消失,尽管 IE 告诉我证书已安装。 在 IE 中清除安全警告后,我的网站在 chrome (62) 中运行良好。 我的站点使用的是 localhost 和非标准端口,而不是 DNS 名称。一切似乎都很好。HTH
【讨论】:
我收到错误 -New-SelfSignedCertificate : A parameter cannot be found that matches parameter name 'FriendlyName'
。我认为它与serverfault.com/questions/762177/… 有关
Live saver - 特别是通过 IE 安装步骤。谢谢以上是关于创建用于测试 localhost 的自签名证书并使其被浏览器接受的主要内容,如果未能解决你的问题,请参考以下文章
为localhost创建受信任的自签名SSL证书(用于Express / Node)
在 .Net Core 控制台应用程序中生成受信任的自签名证书
LocalHost 的自签名证书上的 Chrome NET::ERR_CERT_AUTHORITY_INVALID 错误