iis 如何为域名创建自签名证书,以在Windows 10及以下版本上进行开发?

8i9zcol2  于 2022-11-12  发布在  Windows
关注(0)|答案(7)|浏览(451)

我有subdomain.example.com,我用于开发目的。我的Web应用程序解决方案包含一个Web API等,我需要从外部系统调用,因此我没有使用localhost。
我现在需要测试SSL,并且需要一个subdomain.example.com开发域名的证书。
我试着创建一个自签名证书,如http://technet.microsoft.com/en-us/library/cc753127(v=ws.10).aspx中所述,但这个证书只对localhost有效。这个证书可以用于我的目的吗?或者我必须为我的开发子域创建一个自签名证书吗?如果我必须为我的开发子域创建一个自签名证书,我可以使用什么实用程序或在线服务(免费)来实现这个目的?

wljmcqd8

wljmcqd81#

使用PowerShell

在Windows 8.1和Windows Server 2012 R2(Windows PowerShell 4.0)及更高版本中,您可以使用新的New-SelfSignedCertificate cmdlet创建自签名证书:
示例:

New-SelfSignedCertificate -DnsName www.mydomain.example -CertStoreLocation cert:\LocalMachine\My

New-SelfSignedCertificate -DnsName subdomain.mydomain.example -CertStoreLocation cert:\LocalMachine\My

New-SelfSignedCertificate -DnsName *.mydomain.example -CertStoreLocation cert:\LocalMachine\My

使用IIS管理员

1.启动IIS管理器
1.在服务器级别的IIS下,选择“服务器证书
1.在右侧的“操作”下,选择“创建自签名证书
1.在显示“为证书指定友好名称”的位置,键入适当的名称以供参考。
1.例如:www.domain.examplesubdomain.domain.example
1.然后,从左手的列表中选择您的网站
1.在右侧的“操作”下,选择“绑定
1.添加新的HTTPS绑定并选择您刚创建的证书(如果您的证书是通配符证书,则需要指定主机名)
1.单击“确定”并进行测试。

camsedfj

camsedfj2#

使用IIS的自签名证书功能,您无法设置证书的公用名(CN),因此无法创建绑定到您选择的子域的证书。
解决此问题的一种方法是使用makecert.exe,它与.Net 2.0 SDK捆绑在一起。在我的服务器上,它位于:

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

然后,您可以创建一个绑定到子域并由新颁发机构签名的证书:
(Note-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霍尔的帖子中所述。
Mike奥布莱恩在http://www.mikeobrien.net/blog/creating-self-signed-wildcard上发表了一篇出色的博客文章,感谢他对该解决方案的所有赞誉

6gpjuf90

6gpjuf903#

我不得不通过将给出的答案和其他资源中的一些片段结合起来,在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版本的建议是在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:

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证书存储区,并且只信任这个证书,如果你在Firefox中为它添加一个例外。执行此操作的按钮就在警告的正下方。
证书对名称无效...

这个警告表明你做错了什么。你的证书的(通配符)域与你的网站的域不匹配。这个问题必须通过改变你的网站的(子)域或颁发一个匹配的新证书来解决。事实上,即使证书不匹配,你也可以在FF中添加一个例外,但你永远不会在Chrome中得到一个绿色挂锁符号。
Firefox可以在这个地方显示许多其他漂亮的、可以理解的证书警告,比如过期的证书、签名算法过时的证书等等。我发现没有其他浏览器能给我这种级别的反馈来解决任何问题。

我应该选择开发哪个(子)域模式?

在上面的New-SelfSignedCertificate命令中,我们使用了通配符域*.dev.local
你可能会想:为什么不使用*.local
原因很简单:作为通配符域是非法的。
万用字符凭证 * 必须 * 至少包含第二层域名。星号(*)只允许从第三层往上。
因此,当你在HTTP下开发时,xyz.local形式的域是可以的,并且你不需要证书。但是如果你在HTTPS中使用该域模式,你将被迫为你开始的每个新项目颁发一个新的匹配证书。最好使用xyz.dev.local形式的域和一个用于*.dev.local的通配符证书。

重要附注:

  • 有效的主机域只能包含字母a到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的问题

这实际上与自签名证书无关,但仍与整个过程相关:
按照上述步骤操作后,当您打开myname.dev.local时,Edge可能不会显示 * 任何 * 内容。
原因是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/

epggiuax

epggiuax4#

为特定域创建新证书:

以管理员身份打开PowerShell伊势,运行命令:

New-SelfSignedCertificate -DnsName *.mydomain.example, localhost -CertStoreLocation cert:\LocalMachine\My

要信任新证书:

  • 打开mmc.exe
  • 转到控制台根目录-〉证书(本地计算机)-〉个人
  • 选择您创建的证书,右键单击-〉所有任务-〉导出,然后按照导出向导创建.pfx文件
  • 转到控制台根目录-〉证书-〉受信任的根证书颁发机构,然后导入新的.pfx文件
    将证书绑定到您的站点:
  • 打开IIS管理器
  • 选择站点,然后在右窗格中选择“编辑站点”-〉“绑定
  • 使用正确的主机名和新证书添加新的HTTPS绑定
vuktfyat

vuktfyat5#

当我想启用IIS 8上的SSL时,我遇到了同样的问题。我在博客here上发表了一篇详细的文章,但我不想给予你一个链接答案。最后,我使用的工具是OpenSSL,在与makecert命令斗争了很多天之后。证书是在Debian中生成的,但我可以无缝地将其导入IIS 7和8。
下载与您的操作系统兼容的OpenSSLthis配置文件。将配置文件设置为OpenSSL的默认配置。

  • 首先,我们将生成证书颁发机构(CA)的私钥和证书。此证书用于签署证书请求(CSR)。*

您必须填写此过程中需要填写的所有字段。

  1. openssl req -new -x509 -days 3650 -extensions v3_ca -keyout root-cakey.pem -out root-cacert.pem -newkey rsa:4096
    您可以使用以下默认设置创建配置文件:现在,我们将生成证书请求,该文件将发送到证书颁发机构。

**公用名称必须设置为站点的域,例如:**public.organization.com

  1. openssl req -new -nodes -out server-csr.pem -keyout server-key.pem -newkey rsa:4096
  • 现在,证书请求已使用生成的CA证书签名。*
  1. openssl x509 -req -days 365 -CA root-cacert.pem -CAkey root-cakey.pem -CAcreateserial -in server-csr.pem -out server-cert.pem
    必须将生成的证书导出到可导入IIS的.pfx文件中。
  2. 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的证书签名。
  • 打开命令提示符并键入mmc
  • 点击文件
  • 选择添加/删除管理单元...
  • 双击证书
  • 选择计算机帐户下一步-〉
  • 选择本地计算机完成
    *好的
  • 转到证书-〉受信任的根证书颁发机构-〉证书,右键单击证书并选择所有任务-〉导入...

  • 选择下一步-〉浏览...
  • 您必须选择所有文件以浏览root-cacert.pem文件的位置。
  • 单击下一步并选择将所有证书放入以下存储区:* 受信任的根证书颁发机构 *。
  • 单击"下一步“和”完成“。

有了这一步,IIS就信任了我们证书的真实性。
1.在最后一步中,我们将把证书导入IIS并添加绑定站点。

  • 打开Internet信息服务(IIS)管理器或在命令提示符下键入 inetmgr,然后转到服务器证书
  • 单击导入...
  • 设置.pfx文件的路径、密码短语并选择Web Hosting上的证书存储。

  • 单击确定
  • 现在,在IIS管理器上转到您的站点,选择绑定...添加新绑定。
  • 选择https作为绑定类型,您应该能够看到导入的证书。
  • 单击确定,所有操作完成。

sycxhyv7

sycxhyv76#

另一个选择是创建一个自签名证书,允许您指定每个网站的域名。这意味着您可以在多个域名中使用它。
在IIS管理器中
1.单击计算机名称节点
1.开放式服务器证书
1.在“动作”面板中,选择“创建自签名证书”
1.在“指定友好名称...”中,将其命名为 *Dev(从类型列表中选择“个人”)
1.保存
现在,在您的IIS网站上...
1.管理绑定
1.为Http创建新绑定
1.从列表中选择您的自签名证书
1.一旦选择,域名框将被启用,您将能够输入您的域名.

20jt8wwn

20jt8wwn7#

另一种生成自签名证书的简单方法是使用JexusManager,

1.在“连接”面板中选择一个服务器节点。
1.在中间面板中,单击“服务器证书”图标以打开管理页面。
1.在“操作”面板下,单击“生成自签名证书...”菜单项。
https://docs.jexusmanager.com/tutorials/self-signed.html

相关问题