141

我有subdomain.example.com用于开发目的的。我的 Web 应用程序解决方案包含一个 Web API 等,我需要从外部系统调用,因此我没有使用 localhost。

我现在需要测试 SSL 并且需要我的subdomain.example.com开发域名的证书。

我已尝试按照http://technet.microsoft.com/en-us/library/cc753127(v=ws.10).aspx中的说明创建自签名证书,但此证书仅适用于 localhost。此证书可以用于我的目的还是我必须为我的开发子域创建一个自签名?如果我必须为我的开发子域创建一个自签名证书,我可以为此使用什么实用程序或在线服务(免费)?

4

7 回答 7

142

使用 PowerShell

New-SelfSignedCertificate从 Windows 8.1 和 Windows Server 2012 R2 (Windows PowerShell 4.0) 及更高版本,您可以使用新的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 管理器

  1. 启动 IIS 管理器
  2. 在服务器级别,在 IIS 下,选择服务器证书
  3. 在右侧的操作下选择创建自签名证书
  4. 如果它说“为证书指定一个友好名称”,请输入适当的名称以供参考。
    1. 示例:www.domain.comsubdomain.domain.com
  5. 然后,从左侧列表中选择您的网站
  6. 在右侧的 Actions 下选择 Bindings
  7. 添加新的 HTTPS 绑定并选择您刚刚创建的证书(如果您的证书是通配符证书,则需要指定主机名)
  8. 单击确定并进行测试。
于 2013-10-18T09:43:46.767 回答
141

使用 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上的出色博客文章

于 2014-03-09T12:56:21.337 回答
60

为您的特定域创建新证书:

以管理员身份打开 Powershell ISE,运行命令:

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

要信任新证书:

  • 打开 mmc.exe
  • 转到控制台根目录 -> 证书(本地计算机) -> 个人
  • 选择您创建的证书,右键单击 -> 所有任务 -> 导出并按照导出向导创建一个 .pfx 文件
  • 转到控制台根 -> 证书 -> 受信任的根证书颁发机构并导入新的 .pfx 文件

要将证书绑定到您的站点:

  • 打开 IIS 管理器
  • 选择您的站点,然后在右侧窗格中选择 Edit Site -> Bindings
  • 使用正确的主机名和新证书添加新的 https 绑定
于 2014-12-02T20:03:15.187 回答
57

我不得不通过结合给定答案和更多资源中的点点滴滴来解决 Windows 上的自签名证书。这是我自己的(希望是完整的)演练。希望它能让你摆脱我自己痛苦的学习曲线。它还包含有关相关主题的信息,这些信息迟早会在您创建自己的证书时弹出。

在 Windows 10 及更低版本上创建自签名证书

不要使用 makecert.exe。它已被 Microsoft 弃用。
现代方式使用 Powershell 命令。

视窗 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 证书存储,并且只会信任此证书,前提是您在 Firefox 中为其添加例外。执行此操作的按钮位于警告下方。

证书对姓名无效...

此警告表明,您做错了什么。您证书的(通配符)域与您网站的域不匹配。该问题必须通过更改您网站的(子)域或颁发匹配的新证书来解决。事实上,即使证书不匹配,您也可以在 FF 中添加一个例外,但您永远不会在 Chrome 中使用这种组合获得绿色挂锁符号。

Firefox 可以在此位置显示许多其他不错且易于理解的证书警告,例如过期证书、具有过时签名算法的证书等。我发现没有其他浏览器可以给我这种级别的反馈来确定任何问题。

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

在上面的 New-SelfSignedCertificate 命令中,我们使用了通配符 domain *.dev.local

你可能会想:为什么不使用*.local?

原因很简单:作为通配符域是非法的。
通配符证书必须至少包含文字二级域名。星号 (*) 只允许从第三层以上。

因此,xyz.local当您在 HTTP 下开发并且不需要证书时,表单的域是可以的。但是,如果您将该域模式与 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的问题

这实际上与自签名证书无关,但仍然与整个过程有关:
按照上述步骤进行操作后,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/

于 2018-07-10T09:18:56.523 回答
17

当我想为托管在 IIS 8 上的项目启用 SSL 时,我遇到了同样的问题。我在这里的博客中发布了一篇详细的文章,但我不想给你一个链接答案。最后我使用的工具是OpenSSL,经过多日与makecert命令的斗争。证书是在 Debian 中生成的,但我可以将它无缝导入到 IIS 7 和 8 中。

下载与您的操作系统兼容的OpenSSL和配置文件。将配置文件设置为 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 文件。

  1. 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 证书导入到 Trusted Root Certification Authorities,因为 IIS 可以信任要导入的证书。请记住,要导入 IIS 的证书已经使用 CA 的证书进行了签名。
  • 打开命令提示符并输入mmc
  • 点击文件
  • 选择添加/删除管理单元...。
  • 双击证书
  • 选择计算机帐户下一步 ->
  • 选择本地计算机完成
  • 好的
  • 转到Certificates -> Trusted Root Certification Authorities -> Certificates,点击Certificates并选择All Tasks -> Import ...

在此处输入图像描述

  • 选择下一步->浏览...
  • 您必须选择所有文件才能浏览root-cacert.pem文件的位置。
  • 单击下一步并选择将所有证书放在以下存储中受信任的根证书颁发机构
  • 单击下一步完成

在此处输入图像描述

通过这一步,IIS 信任我们证书的真实性。

  1. 在我们的最后一步中,我们将证书导入 IIS 并添加绑定站点。
  • 打开Internet 信息服务 (IIS) 管理器或在命令提示符下键入inetmgr并转到Server Certificates
  • 点击导入...。
  • 在Web Hosting上设置 .pfx 文件的路径、密码和选择证书存储。

在此处输入图像描述

  • 单击确定

  • 现在转到您在 IIS 管理器上的站点并选择Bindings...添加一个新绑定。

  • 选择 https 作为绑定类型,您应该能够看到导入的证书。

  • 单击确定,一切都完成了。

在此处输入图像描述

于 2015-05-28T21:23:58.497 回答
3

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

杰克萨斯经理

  1. 在 Connections 面板中选择一个服务器节点。
  2. 在中间面板中,单击服务器证书图标以打开管理页面。
  3. 在“操作”面板下,单击“生成自签名证书...”菜单项。

https://docs.jexusmanager.com/tutorials/self-signed.html

于 2016-05-03T13:58:21.630 回答
3

另一种选择是创建一个自签名证书,允许您为每个网站指定域名。这意味着您可以跨多个域名使用它。

在 IIS 管理器中

  1. 单击机器名称节点
  2. 开放服务器证书
  3. 在操作面板中,选择“创建自签名证书”
  4. 在“指定友好名称...”中将其命名为 *Dev(从类型列表中选择“个人”)
  5. 节省

现在,在您的 IIS 网站上...

  1. 管理绑定
  2. 为 Https 创建一个新绑定
  3. 从列表中选择您的自签名证书
  4. 选择后,域名框将启用,您将能够输入您的域名。

在此处输入图像描述

于 2017-04-12T12:07:11.907 回答