当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 如何使用 PowerShell(并绑定)生成 IIS 证书请求

作者:精品下载站 日期:2024-12-14 12:39:47 浏览:16 分类:玩电脑

如何使用 PowerShell(并绑定)生成 IIS 证书请求


如果您想了解如何生成 IIS 证书请求,那么您来对地方了。在本文中,我将介绍如何使用 PowerShell 完成此操作以及如何将证书绑定到 IIS 网站。

让我们弄清楚一件事。我讨厌密码学和证书。在我的职业生涯中,我曾多次成为“证书人”。然而,这只是系统管理员的另一顶帽子。

我从来没有达到完全理解这项技术的地步,而且我试图围绕该领域完成的每项任务似乎都无法成功。这绝对是一项无情的技术。

让我告诉您一个关于使用 PowerShell 自动在 IIS 服务器上安装证书的故事。

使命

从客户端请求新的公共 Digicert 证书,将其安装在工作组中运行 IIS 8.5 的远程 Windows Server 2012 R2 Core Server 上,设置与网站的 SSL 绑定,并使用已安装的证书进行绑定。很简单,对吧?哈哈!

儿子,这是怎么做的!

简而言之,需要 X 个步骤才能实现这一目标。

  1. 在将安装证书的计算机上生成 IIS 证书签名请求。就我而言,我只有 WinRM 访问权限,因此我必须使用 Invoke-Command 在远程服务器上执行 certreq.exe 并将 CSR 的内容发送到本地文件。
  2. 获取由公共 CA 签署的 CSR。 (这里没有帮助 - 一个漂亮的证书刚刚从我合作的安全部门回来)。就我而言,安全团队给了我一个 P7B 证书集合,这些证书汇总成一个 .CER 文件,其中包括我正在寻找的证书以及中间证书。这需要一些修补才能发挥作用。
  3. 在将安装证书的计算机上完成证书签名请求。这会将证书放入证书存储区。
  4. 在服务器上创建 SSL IIS Web 绑定。
  5. 将证书附加到 Web 绑定。

生成 IIS 证书请求

您的第一个任务是在远程服务器上使用此 PowerShell IIS 脚本运行 certreq.exe 以收集请求文件。为此,certreq.exe 需要 INF 文件作为输入。该文件用于您的证书最终将具有的所有各种选项。无需赘述,这是我正在使用的 INF 文件的副本。

[Version]
Signature = "$Windows NT$"
[NewRequest]
Subject = "C=US,S=State,L=City,O=Company,OU=IT,CN=Name"
Exportable = TRUE
KeyLength = 2048
KeySpec = 1
KeyUsage = 0xa0
MachineKeySet = True
ProviderName = "Microsoft RSA SChannel Cryptographic Provider"
ProviderType = 12
Silent = True
SMIME = False
RequestType = PKCS10

您将在 New-CertificateSigningRequest 函数中看到,我让您可以非常轻松地自定义它。实际上,如果你使用我的函数,你甚至永远不会看到这个文件,因为它只是临时创建 CSR(请求文件)所需要的。

接下来,您需要在远程服务器上获取此 INF 文件,并使用以下参数运行 certreq.exe,例如 certreq.exe -new "$InfFilePath" "$reqFilePath".

这将在远程计算机上生成 CSR(请求文件)。然后,您需要将此文件发送给您的安全团队。这还将在本地计算机上下文中的证书颁发请求中创建一个包含私钥和公钥的证书。

[玩转系统] 如何使用 PowerShell(并绑定)生成 IIS 证书请求

完成 IIS 证书请求

就我而言,我取回了一个 CER 文件。我在此 PowerShell IIS 脚本中创建了一个函数,只需将其直接导入到本地计算机上下文中的个人存储中即可发现 IIS 无法看到它。原因是证书还必须包含私钥。仅将证书导入个人存储是行不通的。我必须使用 certreq.exe 来完成证书请求。

为此,您需要将从安全团队收到的证书复制到远程服务器上,然后执行 certreq.exe,如下所示 certreq.exe -accept -machine "C:\已颁发证书.cer”

您始终需要使用 -machine 参数确保响应证书始终进入本地计算机上下文。根据我读到的所有内容,这应该成功完成,但它绝对不适合我。由于某种原因,我收到了如下错误:

[玩转系统] 如何使用 PowerShell(并绑定)生成 IIS 证书请求

事实证明,这意味着请求文件中的公钥与安全团队返回的公钥不匹配。要对此进行测试,只需运行 certutil.exe -dump requestfile.req 和 certutil -dumpissuedcert.cer 即可。向下滚动输出,直到看到公钥区域。

[玩转系统] 如何使用 PowerShell(并绑定)生成 IIS 证书请求

复制每个私钥并在文本编辑器中进行比较以确保它们相同。如果没有,请联系您的安全团队,因为您没有正确签署您的请求!

如果这些匹配,那么你就很好,你不应该收到这个错误。

创建 SSL 绑定

在远程服务器上运行:

PS> Import-Module WebAdministration
PS> New-WebBinding -Name $WebsiteName -IP * -Port 443 -Protocol https

将证书附加到 SSL 绑定

在远程服务器上,运行:

PS> $certificate = Get-Item Cert:\localmachine\My$Thumbprint
PS> $certificate | New-Item "IIS:\SSLBindings

获取 PowerShell IIS 脚本

.0.0.0!443"

示例代码

如果一切顺利的话,你应该完成了!现在,如果您需要一些帮助来完成此操作,我创建了三个函数来使其更容易实现。前往我的 Github 存储库获取这些函数:

https://github.com/adbertram/Random-PowerShell-Work/tree/master/Certificates

https://github.com/adbertram/Random-PowerShell-Work/tree/master/IIS

## Send the file that this outputs to your certificate people New-CertificateSigningRequest -SubjectHost 'somesubject' -FilePath 'C:\somefile.req' -ComputerName REMOTESERVER ## Import the cert receieved Import-CertificateSigningRequestResponse -FilePath C:\issuedcert.cer -ComputerName REMOTESERVER ##Create the binding and attach the cert. New-IISWebBinding -ComputerName 'zapp09rpr01' -WebsiteName GHI -Protocol https -Port 443 -Certificate $cert
  • 如何使用 PowerShell 管理 IIS 网站
  • 相关阅读

    请务必查看有关使用 PowerShell 管理 IIS 的其他 ATA 博客文章

    • 使用 PowerShell 管理 IIS Web 应用程序池

    您需要 登录账户 后才能发表评论

    取消回复欢迎 发表评论:

    关灯