我不得不通过结合给定答案和更多资源中的点点滴滴来迷惑Windows上的自签名证书。这是我自己的(并且希望是完整的)演练。希望它将为您节省一些我自己的痛苦学习曲线。它还包含有关主题的信息,这些信息迟早会在您创建自己的证书时弹出。
在Windows 10及更低版本上创建自签名证书
不要使用makecert.exe。它已被Microsoft弃用。
现代方式使用Powershell命令。
Windows 10:
使用管理员权限打开Powershell:
New-SelfSignedCertificate -DnsName "*.dev.local", "dev.local", "localhost" -CertStoreLocation cert:\LocalMachine\My -FriendlyName "Dev Cert *.dev.local, dev.local, localhost" -NotAfter (Get-Date).AddYears(15)
Windows 8,Windows Server 2012 R2:
在这些系统上的Powershell中,参数-FriendlyName和-NotAfter不存在。只需从上面的命令行中删除它们。
使用管理员权限打开Powershell:
New-SelfSignedCertificate -DnsName "*.dev.local", "dev.local", "localhost" -CertStoreLocation cert:\LocalMachine\My
一种替代方法是使用下面的Windows较旧版本的方法,该方法使您可以使用Win 10的所有功能来创建证书...
较旧的Windows版本:
对于较旧的Windows版本,我的建议是在Win 10计算机上创建证书,使用mmc实例将其导出到.PFX文件(请参见下面的“信任证书”),然后将其导入到目标计算机上的证书存储中。旧的Windows操作系统。要导入证书,请不要右键单击它。尽管上下文菜单中有一个“导入证书”项,但它使我无法在Win Server 2008上使用它进行所有试验。而是在目标计算机上打开另一个mmc实例,导航到“证书(本地计算机)/个人/证书” ,右键单击进入中间窗格,然后选择所有任务→导入。
产生的证书
上面的两个命令都为域localhost
和创建证书*.dev.local
。
Win10版本的生存时间为15年,显示名称为“ Dev Cert * .dev.local,dev.local,localhost”。
更新:如果您在参数中提供了多个主机名条目-DnsName
(如上所示),则这些条目中的第一个将成为域的主题(AKA通用名称)。所有主机名条目的完整列表将存储在证书的“使用者备用名称”(SAN)中。(感谢@BenSewards指出这一点。)
创建该证书后,该证书将立即在IIS的任何HTTPS绑定中可用(以下说明)。
信任证书
新证书不是任何信任链的一部分,因此,任何浏览器都不认为它是可信任的。要更改此设置,我们会将证书复制到您计算机上受信任的根CA的证书存储中:
打开mmc.exe,文件→添加/删除管理单元→在左栏中选择“证书”→添加→选择“计算机帐户”→下一步→“本地计算机...”→完成→确定
在左列中,选择“证书(本地计算机)/个人/证书”。
查找新创建的证书(在Win 10中,“友好名称”列可能会有所帮助)。
选择此证书,然后按Ctrl-C将其复制到剪贴板。
在左列中选择“证书(本地计算机)/受信任的根CA /证书”。
按Ctrl-V将您的证书粘贴到此存储中。
该证书应出现在“受信任的根权限”列表中,并且现在被认为是可信任的。
在IIS中使用
现在,您可以转到IIS管理器,选择本地网站的绑定→添加→https→输入表单的主机名 myname.dev.local
(您的证书仅对有效*.dev.local
)并选择新证书→确定。
添加到主机
还将您的主机名添加到C:\ Windows \ System32 \ drivers \ etc \ hosts:
127.0.0.1 myname.dev.local
快乐
现在,Chrome和IE应该将证书视为可信赖的文件,并在您打开网站时加载您的网站https://myname.dev.local
。
Firefox维护自己的证书存储。要在此处添加证书,您必须在FF中打开您的网站,并在FF警告您有关证书时将其添加到例外中。
对于Edge浏览器,可能需要执行更多操作(请参阅下文)。
测试证书
要测试您的证书,Firefox是您的最佳选择。(相信我,我本人是Chrome迷,但在这种情况下FF更好。)
原因如下:
- Firefox使用其自己的SSL缓存,该缓存在shift-reload时清除。因此,对本地网站证书的任何更改都将立即反映在FF的警告中,而其他浏览器可能需要重新启动或手动清除Windows SSL缓存。
- FF还为您提供了一些有价值的提示来检查证书的有效性:FF显示其证书警告时,单击“高级”。FF将向您显示一个简短的文本块,并在文本块的中心行显示一个或多个可能的警告:
证书不受信任,因为它是自签名的。
此警告是正确的!如上所述,Firefox不使用Windows证书存储,并且仅在为它添加例外时才会信任该证书。该按钮位于警告的正下方。
证书的名称无效...
此警告表明您做错了什么。证书的(通配符)域与您的网站域不匹配。必须通过更改网站的(子)域或颁发匹配的新证书来解决该问题。实际上,即使证书不匹配,您也可以在FF中添加一个例外,但是使用这种组合,您将永远不会在Chrome中看到绿色的挂锁符号。
Firefox可以在此位置显示许多其他不错且易于理解的证书警告,例如过期的证书,带有过时签名算法的证书等。
我应该选择开发哪种(子)域模式?
在上面的New-SelfSignedCertificate命令中,我们使用了通配符域*.dev.local
。
您可能会认为:为什么不使用*.local
?
原因很简单:作为通配符域,它是非法的。
通配符证书必须至少包含第二级域名。
因此,表单的域*.local
非常适合开发HTTP网站。但是对于HTTPS来说却不是那么多,因为您将不得不为启动的每个新项目颁发新的匹配证书。
重要注意事项:
- 有效的主机域只能包含字母z,数字,连字符和点。禁止使用下划线!一些浏览器对此细节确实挑剔,当它们顽固地拒绝将您的域
motör_head.dev.local
与通配符模式匹配时,可能会给您带来麻烦*.dev.local
。当您切换到时,它们会合规motoer-head.dev.local
。
- 证书中的通配符将仅与域中的一个标签(=两个点之间的部分)匹配,再也不会匹配。
*.dev.local
匹配myname.dev.local
但不匹配 other.myname.dev.local
!
*.*.dev.local
证书中不能使用多级通配符()。因此other.myname.dev.local
只能用形式的通配符覆盖*.myname.dev.local
。因此,最好不要使用第四级域部分。将所有变体放入第三部分。这样,您将为所有开发站点获得一个证书。
Edge的问题
这实际上与自签名证书无关,但仍与整个过程有关:
在执行上述步骤之后,打开时Edge可能不会显示任何内容myname.dev.local
。
原因是用于现代应用程序的Windows 10网络管理的一个特征,称为“网络隔离”。
要解决该问题,请以管理员权限打开命令提示符,然后输入以下命令一次:
CheckNetIsolation LoopbackExempt -a -n=Microsoft.MicrosoftEdge_8wekyb3d8bbwe
可以在这里找到有关边缘和网络隔离的更多信息:https :
//blogs.msdn.microsoft.com/msgulfcommunity/2015/07/01/how-to-debug-localhost-on-microsoft-edge/
makecert.exe
才能进入路径。对于证书,我认为我会更安全和更实用-a SHA512 -len 8192
-它花了永远的时间。就像我怀疑的那样,它对IIS使用的加密级别没有什么影响。默认情况下,IIS使用128位,您必须执行组策略操作才能更改此设置。请其他读者进一步注意:不要更改后的魔术数字-eku
,它们是必需的。