为 IIS 创建有效的测试 SSL 证书
Posted
技术标签:
【中文标题】为 IIS 创建有效的测试 SSL 证书【英文标题】:creating valid test SSL certificates for IIS 【发布时间】:2016-08-20 16:59:43 【问题描述】:我想在带有 IIS 的开发环境中测试 SSL 连接。为此,我需要创建一个安装在机器存储中的自签名根证书,以及另一个使用根证书签名的证书以安装在 IIS 中。
现在不推荐使用makecert
执行此操作,所以我想知道如何使用 Powershell 和New-SelfSignedCertificate
命令执行此操作。
如果您正确设置了密钥使用设置,将获得奖励积分 :-)
注意:直接在 IIS 中使用自签名证书不起作用,因为浏览器和 WCF 认为它们无效。
作为参考,这里是使用 makecert 的方法:
# create the self signed root certificate
makecert -n "CN=root.lan" -r -sv root.pvk root.cer
# create the certificate for IIS that gets signed with the root certificate
makecert -sk "Local Certificate" -iv root.pvk -n "CN=localhost" -ic root.cer -sr localmachine -ss my -sky exchange -pe
# convert to other formats
cert2spc localhost.cer localhost.spc
pvk2pfx -pvk localhost.pvk -spc localhost.spc -pfx localhost.pfx
【问题讨论】:
如果您只使用 RSA 密钥,MakeCert.exe
就足够了,但最好使用 MakeCert.exe
的一些附加选项。 New-SelfSignedCertificate
不会给你带来任何好处。互联网上可用的其他 Powershell 模块可能会更好。您可以使用OpenSSL.exe 而不是MakeCert.exe
创建可以在IIS 上使用的RSA 或椭圆曲线证书。如果您的 IIS 服务器可通过 Internet(端口 80)使用,那么您可以使用 Let's Encrypt 获得免费的真实 SSL 证书,并且客户端无需在受信任的根目录中安装您的“CA”证书。
问题是使用New-SelfSignedCertificate
是有原因的。我不想使用MakeCert
或OpenSSL
。
只需使用启动 powershell 并使用New-SelfSignedCertificate -?
和get-help New-SelfSignedCertificate -examples
。可能性取决于您使用的 Windows 版本。比较 technet.microsoft.com/en-us/library/hh848633.aspx 和 technet.microsoft.com/en-us/library/hh848633(v=wps.630).aspx
我的操作系统是 Windows 10。 powershell 版本的更新还应该在旧系统上启用新功能。我猜-ExistingKey
参数可能是解决方案的关键(如MakeCert
中的-iv
参数)。但是,到目前为止我还没有找到一个例子。
在我看来,-Signer
指定了 CA 证书。我做了一些测试,很快就会发布我的答案并附上使用示例。
【参考方案1】:
包含在 Windows 10 中的新版本 New-SelfSignedCertificate
描述为 here。可以使用New-SelfSignedCertificate -?
和get-help New-SelfSignedCertificate -examples
来获取一些附加信息。
文档和示例似乎仍然不够清晰,无法创建两个证书:
一个自签名证书,将用作示例中的 CA 证书 第二个 SSL 证书,使用第一个证书签名。实现可能如下(我在选项下方写了多行只是为了使文本更具可读性):
New-SelfSignedCertificate -HashAlgorithm sha384 -KeyAlgorithm RSA -KeyLength 4096
-Subject "CN=My Test (PowerShell) Root Authority,O=OK soft GmbH,C=DE"
-KeyUsage DigitalSignature,CertSign -NotAfter (get-date).AddYears(10)
-CertStoreLocation "Cert:\CurrentUser\My" -Type Custom
输出看起来像
Directory: Microsoft.PowerShell.Security\Certificate::CurrentUser\My
Thumbprint Subject
---------- -------
B7DE93CB88E99B01D166A986F7BF2D82A0E541FF CN=My Test (PowerShell) Root Authority, O=OK soft GmbH, C=DE
值B7DE93CB88E99B01D166A986F7BF2D82A0E541FF
对于使用证书进行签名很重要。如果您忘记了值,您可以通过 CN 名称找到它
dir cert:\CurrentUser\My | where Subject -Like "CN=My Test (PowerShell)*"
或通过使用certutil.exe -user -store My
在当前用户的我的商店中显示证书。
要创建 SSL 证书并根据先前创建的证书对其进行签名,例如可以执行以下操作
New-SelfSignedCertificate -Type Custom -Subject "CN=ok01.no-ip.org"
-HashAlgorithm sha256 -KeyAlgorithm RSA -KeyLength 2048
-KeyUsage KeyEncipherment,DigitalSignature
-CertStoreLocation "cert:\LocalMachine\My"
-Signer cert:\CurrentUser\My\B7DE93CB88E99B01D166A986F7BF2D82A0E541FF
-TextExtension @("2.5.29.37=text1.3.6.1.5.5.7.3.1,1.3.6.1.5.5.7.3.2","2.5.29.17=textDNS=ok01.no-ip.org&DNS=ok01.fritz.box")
在我看来,最终证书将具有所需的所有属性。很明显,来自上述参数的许多值仅包含示例,您必须根据您的要求在那里修改。其他一些常见的步骤,比如在 Trusted Root 中导入根证书,导出证书等等,我这里就不赘述了。这些步骤不是您主要问题的 psrt。
【讨论】:
@MovGP0:不客气!我仍然建议您看一下 Let's Encrypt。看看here。我个人使用 letsencrypt-win-simple 使用 Let's Encrypt 授权创建 SSL 证书,该授权在所有计算机上都受信任。 我需要为 CA 证书指定-KeyUsage DigitalSignature,CertSign
,否则 Web 浏览器不会验证“子”证书。
@Simon_Weaver:谢谢!我更改了用于生成根证书的-KeyUsage
参数的值。以上是关于为 IIS 创建有效的测试 SSL 证书的主要内容,如果未能解决你的问题,请参考以下文章
如何为通过 SSL 进行双向身份验证的本地测试创建客户端证书?