我有subdomain.example.com
,我用于开发目的。我的Web应用程序解决方案包含一个Web API等,我需要从外部系统调用,因此我没有使用localhost。
我现在需要测试SSL,并且需要一个subdomain.example.com
开发域名的证书。
我试着创建一个自签名证书,如http://technet.microsoft.com/en-us/library/cc753127(v=ws.10).aspx中所述,但这个证书只对localhost有效。这个证书可以用于我的目的吗?或者我必须为我的开发子域创建一个自签名证书吗?如果我必须为我的开发子域创建一个自签名证书,我可以使用什么实用程序或在线服务(免费)来实现这个目的?
7条答案
按热度按时间wljmcqd81#
使用PowerShell
在Windows 8.1和Windows Server 2012 R2(Windows PowerShell 4.0)及更高版本中,您可以使用新的
New-SelfSignedCertificate
cmdlet创建自签名证书:示例:
使用IIS管理员
1.启动IIS管理器
1.在服务器级别的IIS下,选择“服务器证书
1.在右侧的“操作”下,选择“创建自签名证书
1.在显示“为证书指定友好名称”的位置,键入适当的名称以供参考。
1.例如:
www.domain.example
或subdomain.domain.example
1.然后,从左手的列表中选择您的网站
1.在右侧的“操作”下,选择“绑定
1.添加新的HTTPS绑定并选择您刚创建的证书(如果您的证书是通配符证书,则需要指定主机名)
1.单击“确定”并进行测试。
camsedfj2#
使用IIS的自签名证书功能,您无法设置证书的公用名(CN),因此无法创建绑定到您选择的子域的证书。
解决此问题的一种方法是使用makecert.exe,它与.Net 2.0 SDK捆绑在一起。在我的服务器上,它位于:
您可以创建签名授权机构并将其存储在LocalMachine证书存储库中,如下所示(这些命令必须从管理员帐户或在提升的命令提示符下运行):
然后,您可以创建一个绑定到子域并由新颁发机构签名的证书:
(Note-in参数的值必须与用于生成上述授权的CN值相同。)
然后,您的证书将出现在IIS管理器中,并绑定到您的站点,如Tom霍尔的帖子中所述。
Mike奥布莱恩在http://www.mikeobrien.net/blog/creating-self-signed-wildcard上发表了一篇出色的博客文章,感谢他对该解决方案的所有赞誉
6gpjuf903#
我不得不通过将给出的答案和其他资源中的一些片段结合起来,在Windows上摸索自己的自签名证书。下面是我自己的(希望是完整的)演练。希望它能让你省去一些我自己的痛苦学习曲线。它还包含了相关主题的信息,当你创建自己的证书时,迟早会弹出这些信息。
在Windows 10及更低版本上创建自签名证书
不要使用makecert.exe。Microsoft已不建议使用它。
现代方法使用Powershell命令。
Windows 10操作系统:
使用管理员权限打开Powershell:
Windows 8操作系统,Windows Server 2012 R2操作系统:
在这些系统上的Powershell中,参数-FriendlyName和-NotAfter不存在。只需从上面的命令行中删除它们即可。
使用管理员权限打开Powershell:
另一种方法是使用下面的旧Windows版本的方法,它允许您使用Win 10的所有功能进行证书创建...
较旧的Windows版本:
我对旧的Windows版本的建议是在Win10机器上创建证书,使用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:
"快乐"
现在,Chrome和IE应该将证书视为可信的,并在您打开
https://myname.dev.local
时加载您的网站。Firefox维护着自己的证书库。要在这里添加证书,你必须在FF中打开你的网站,并在FF警告你证书时将其添加到例外中。
对于Edge浏览器,可能需要更多操作(请参见下文)。
测试证书
要测试你的证书,Firefox是你最好的选择。(相信我,我自己也是Chrome的粉丝,但在这种情况下,FF更好。)
原因如下:
证书不受信任,因为它是自签名的。
这个警告是正确的!如上所述,Firefox不使用Windows证书存储区,并且只信任这个证书,如果你在Firefox中为它添加一个例外。执行此操作的按钮就在警告的正下方。
证书对名称无效...
这个警告表明你做错了什么。你的证书的(通配符)域与你的网站的域不匹配。这个问题必须通过改变你的网站的(子)域或颁发一个匹配的新证书来解决。事实上,即使证书不匹配,你也可以在FF中添加一个例外,但你永远不会在Chrome中得到一个绿色挂锁符号。
Firefox可以在这个地方显示许多其他漂亮的、可以理解的证书警告,比如过期的证书、签名算法过时的证书等等。我发现没有其他浏览器能给我这种级别的反馈来解决任何问题。
我应该选择开发哪个(子)域模式?
在上面的New-SelfSignedCertificate命令中,我们使用了通配符域
*.dev.local
。你可能会想:为什么不使用
*.local
?原因很简单:作为通配符域是非法的。
万用字符凭证 * 必须 * 至少包含第二层域名。星号(*)只允许从第三层往上。
因此,当你在HTTP下开发时,
xyz.local
形式的域是可以的,并且你不需要证书。但是如果你在HTTPS中使用该域模式,你将被迫为你开始的每个新项目颁发一个新的匹配证书。最好使用xyz.dev.local
形式的域和一个用于*.dev.local
的通配符证书。重要附注:
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的问题
这实际上与自签名证书无关,但仍与整个过程相关:
按照上述步骤操作后,当您打开
myname.dev.local
时,Edge可能不会显示 * 任何 * 内容。原因是Windows 10现代应用程序网络管理的一个特征,称为“网络隔离”。
要解决该问题,请使用管理员权限打开命令提示符,然后输入以下命令一次:
有关边缘和网络隔离的更多信息,请访问:https://blogs.msdn.microsoft.com/msgulfcommunity/2015/07/01/how-to-debug-localhost-on-microsoft-edge/
epggiuax4#
为特定域创建新证书:
以管理员身份打开PowerShell伊势,运行命令:
要信任新证书:
mmc.exe
将证书绑定到您的站点:
vuktfyat5#
当我想启用IIS 8上的SSL时,我遇到了同样的问题。我在博客here上发表了一篇详细的文章,但我不想给予你一个链接答案。最后,我使用的工具是OpenSSL,在与makecert命令斗争了很多天之后。证书是在Debian中生成的,但我可以无缝地将其导入IIS 7和8。
下载与您的操作系统兼容的OpenSSL和this配置文件。将配置文件设置为OpenSSL的默认配置。
您必须填写此过程中需要填写的所有字段。
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
个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。
1.在您的服务器中,必须将CA证书导入到受信任的根证书颁发机构中,因为IIS可以信任要导入的证书。请记住,要导入到IIS中的证书已经用CA的证书签名。
*好的
有了这一步,IIS就信任了我们证书的真实性。
1.在最后一步中,我们将把证书导入IIS并添加绑定站点。
sycxhyv76#
另一个选择是创建一个自签名证书,允许您指定每个网站的域名。这意味着您可以在多个域名中使用它。
在IIS管理器中
1.单击计算机名称节点
1.开放式服务器证书
1.在“动作”面板中,选择“创建自签名证书”
1.在“指定友好名称...”中,将其命名为 *Dev(从类型列表中选择“个人”)
1.保存
现在,在您的IIS网站上...
1.管理绑定
1.为Http创建新绑定
1.从列表中选择您的自签名证书
1.一旦选择,域名框将被启用,您将能够输入您的域名.
20jt8wwn7#
另一种生成自签名证书的简单方法是使用JexusManager,
1.在“连接”面板中选择一个服务器节点。
1.在中间面板中,单击“服务器证书”图标以打开管理页面。
1.在“操作”面板下,单击“生成自签名证书...”菜单项。
https://docs.jexusmanager.com/tutorials/self-signed.html