我有用于开发目的的subdomain.example.com
。我的Web应用程序解决方案包含一个Web API等,我需要从外部系统调用,因此我没有使用localhost。
我现在需要测试SSL并需要我的subdomain.example.com
开发域名证书。
我已尝试创建http://technet.microsoft.com/en-us/library/cc753127(v=ws.10).aspx中概述的自签名证书,但此证书仅适用于localhost。此证书可以用于我的目的还是我必须为我的开发子域创建自签名?如果我必须为我的开发子域创建自签名证书,我可以使用哪种实用程序或在线服务(免费)?
我添加此信息是因为接受的答案似乎没有完全解决问题,或者至少没有为我解决问题。
使用IIS的自签名证书功能,您无法为证书设置公用名(CN),因此无法创建绑定到您选择的子域的证书。
解决此问题的一种方法是使用与.Net 2.0 SDK捆绑在一起的makecert.exe。在我的服务器上它位于:
C:\Program Files\Microsoft.Net\SDK\v2.0 64bit\Bin\makecert.exe
您可以创建签名授权机构并将其存储在LocalMachine证书库中,如下所示(必须从管理员帐户或提升的命令提示符下运行这些命令):
makecert.exe -n "CN=My Company Development Root CA,O=My Company,
OU=Development,L=Wallkill,S=NY,C=US" -pe -ss Root -sr LocalMachine
-sky exchange -m 120 -a sha1 -len 2048 -r
然后,您可以创建绑定到子域并由新权限签名的证书:
(请注意,-in参数的值必须与用于生成上述权限的CN值相同。)
makecert.exe -n "CN=subdomain.example.com" -pe -ss My -sr LocalMachine
-sky exchange -m 120 -in "My Company Development Root CA" -is Root
-ir LocalMachine -a sha1 -eku 1.3.6.1.5.5.7.3.1
然后,您的证书应出现在IIS管理器中,以便绑定到您的站点,如Tom Hall的帖子中所述。
对于Mike O'Brien在http://www.mikeobrien.net/blog/creating-self-signed-wildcard上发表的精彩博客文章,这个解决方案的所有荣誉
使用PowerShell
从Windows 8.1和Windows Server 2012 R2(Windows PowerShell 4.0)及更高版本,您可以使用新的New-SelfSignedCertificate
cmdlet创建自签名证书:
例子:
New-SelfSignedCertificate -DnsName www.mydomain.com -CertStoreLocation cert:\LocalMachine\My
New-SelfSignedCertificate -DnsName subdomain.mydomain.com -CertStoreLocation cert:\LocalMachine\My
New-SelfSignedCertificate -DnsName *.mydomain.com -CertStoreLocation cert:\LocalMachine\My
使用IIS管理器
www.domain.com
或subdomain.domain.com
要为特定域创建新证书,请执行以下操作:
以管理员身份打开Powershell ISE,运行命令:
New-SelfSignedCertificate -DnsName *.mydomain.com, localhost -CertStoreLocation cert:\LocalMachine\My
信任新证书:
要将证书绑定到您的站点:
我不得不通过组合来自给定答案和更多资源的点点滴滴来解决Windows上的自签名证书。这是我自己的(希望是完整的)演练。希望它能省去你一些痛苦的学习曲线。它还包含相关主题的信息,这些信息将在您创建自己的证书时迟早弹出。
不要使用makecert.exe。它已被微软弃用。 现代方式使用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
上述两个命令都为域localhost
和*.dev.local
创建证书。
Win10版本还具有15年的实时时间和可读显示名称“Dev Cert * .dev.local,dev.local,localhost”。
更新:如果您在参数-DnsName
中提供了多个主机名条目(如上所示),则这些条目中的第一个将成为域的主题(AKA通用名称)。所有主机名条目的完整列表将存储在证书的主题备用名称(SAN)字段中。 (感谢@BenSewards指出这一点。)
创建后,证书将立即在IIS的任何HTTPS绑定中提供(下面的说明)。
新证书不属于任何信任链,因此不被任何浏览器视为可靠。要更改它,我们会将证书复制到计算机上受信任的根CA的证书存储区:
打开mmc.exe,文件→添加/删除管理单元→在左栏中选择“证书”→添加→选择“计算机帐户”→下一步→“本地计算机...”→完成→确定
从您的个人商店导出您的证书
在左栏中选择“证书(本地计算机)/个人/证书”。 找到新创建的证书(在Win 10中,“友好名称”列可能有帮助)。 右键单击此证书→所有任务→导出...→下一步→选择“否,不导出私钥”→下一步→选择“DER编码...”→下一步→输入文件名并保存。
提示:我们故意不使用PFX文件格式进行导出。它会将您的私钥包含在导出文件中,并且您通常不希望您的私钥转到任何地方!
将您的证书导入受信任的根CAs商店
在左栏中,右键单击“证书(本地计算机)/受信任的根CA /证书”→“所有任务”→“导入...”→“下一步”→选择刚刚导出的文件→“下一步”→“将所有证书放在以下存储中:受信任的根CA“→下一步→完成。
在国际空间站使用
现在您可以转到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不使用Windows证书存储,只有在为其添加例外时才会信任该证书。执行此操作的按钮位于警告下方。
证书对名称无效......
这个警告显示你做错了什么。您的证书的(通配符)域与您网站的域不匹配。必须通过更改网站(子)域或发布匹配的新证书来解决问题。事实上,即使证书不匹配,你也可以在FF中添加一个例外,但是你不会在Chrome中使用这样的组合获得绿色的挂锁符号。
Firefox可以在这个地方显示许多其他不错且易于理解的证书警告,例如过期的证书,带有过时签名算法的证书等。我发现没有其他浏览器能够给我这样的反馈来解决任何问题。
在上面的New-SelfSignedCertificate命令中,我们使用了通配符域*.dev.local
。
你可能会想:为什么不使用*.local
?
原因很简单:作为通配符域是非法的。 通配符证书必须至少包含二级域名。
因此,*.local
形式的域很适合开发HTTP网站。但对于HTTPS来说并非如此,因为您将被迫为您启动的每个新项目颁发新的匹配证书。
重要的附注:
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
形式的通配符覆盖。因此,最好不要使用第四级域名部分。将所有变体放入第三级部分。这样,您将获得所有开发站点的单个证书。这不是关于自签名证书,但仍与整个过程有关:
执行上述步骤后,当您打开myname.dev.local
时,Edge可能不会显示任何内容。
原因是Windows 10 for Modern Apps的网络管理的一个特征,称为“网络隔离”。
要解决该问题,请使用管理员权限打开命令提示符并输入以下命令:
CheckNetIsolation LoopbackExempt -a -n=Microsoft.MicrosoftEdge_8wekyb3d8bbwe
有关边缘和网络隔离的更多信息,请访问:https://blogs.msdn.microsoft.com/msgulfcommunity/2015/07/01/how-to-debug-localhost-on-microsoft-edge/
当我想为IIS 8上托管的项目启用SSL时,我遇到了同样的问题。最后我使用的工具是OpenSSL,经过多天与makecert命令的斗争。证书是在Debian中生成的,但我可以无缝地导入它IIS 7和8。
下载与您的操作系统和OpenSSL配置文件兼容的this。将配置文件设置为OpenSSL的默认配置。
首先,我们将生成私钥和证书颁发机构(CA)的证书。此证书用于签署证书申请(CSR)。
您必须完成此过程中所需的所有字段。
openssl req -new -x509 -days 3650 -extensions v3_ca -keyout root-cakey.pem -out root-cacert.pem -newkey rsa:4096
您可以使用以下默认设置创建配置文件:现在我们将生成证书请求,该请求是发送给证书颁发机构的文件。
通用名称必须设置为您网站的域名,例如:public.organization.com。
openssl req -new -nodes -out server-csr.pem -keyout server-key.pem -newkey rsa:4096
现在,证书请求已使用生成的CA证书进行签名。
openssl x509 -req -days 365 -CA root-cacert.pem -CAkey root-cakey.pem -CAcreateserial -in server-csr.pem -out server-cert.pem
必须将生成的证书导出到可以导入IIS的.pfx文件中。
openssl pkcs12 -export -out server-cert.pfx -inkey server-key.pem -in server-cert.pem -certfile root-cacert.pem -name "Self Signed Server Certificate"
在此步骤中,我们将导入证书CA.
通过此步骤,IIS信任我们的证书的真实性。
生成自签名证书的另一种简单方法是使用Jexus Manager,
https://www.jexusmanager.com/en/latest/tutorials/self-signed.html