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

[玩转系统] New-SelfSignedCertificate:使用 PowerShell 创建证书

作者:精品下载站 日期:2024-12-14 13:07:56 浏览:13 分类:玩电脑

New-SelfSignedCertificate:使用 PowerShell 创建证书


您需要 SSL 证书来开发网站或测试应用程序吗?与其从第三方提供商购买昂贵的数字证书,为什么不自己创建自签名证书呢?不用担心; PowerShell 为您提供了 New-SelfSignedCertificate cmdlet。

在本教程中,您将学习如何使用各种示例在 PowerShell 中创建新的自签名证书。最后,您将创建具有不同属性并用于不同目的的自签名证书。让我们开始吧!

先决条件

如果您想亲自学习本教程,请确保您满足以下要求。

  • 装有 Windows PowerShell 5.1 或最新 PowerShell 7(截至撰写本文时为 v7.1.3)的 Windows 计算机。本教程将使用 Windows 10 版本 2004 和 Windows PowerShell 5.1。
  • 您的用户帐户必须具有本地计算机的管理员权限。
  • 在本文中,您将使用提升的 PowerShell 会话(以管理员身份运行),并假设您已经打开了该会话。

创建具有单一主题的证书

当您需要在 PowerShell 中创建自签名证书时,New-SelfSignedCertificate cmdlet 是您的好帮手。此 cmdlet 将帮助您创建用于不同目的的证书,例如代码签名、服务器身份验证和文档加密等。

要创建仅包含一个主题(例如单个网站 URL 或一个服务器 FQDN)的自签名证书,New-SelfSignedCertificate cmdlet 仅需要 Subject 参数。您可以将主题视为证书的唯一标签,将其与其他证书区分开来。

例如,在 PowerShell 中运行以下命令,为名为 LocalSite.com 的网站创建自签名证书。此示例将在本地计算机个人证书存储中创建证书以用于服务器身份验证。对于 Web 服务,通常使用证书将保护的网站的 URL 作为主题名称。

本地计算机证书存储中的证书可供本地计算机上的所有用户全局使用。相比之下,当前用户证书存储中的证书仅对当前用户可用。

# Create a self-signed certificate in the local machine personal certificate store and store the result in the $cert variable.
$cert = New-SelfSignedCertificate -Subject localsite.com
# Display the new certificate properties
$cert | Format-List -Property *

要在当前用户个人证书存储 (Cert:\CurrentUser\My) 中创建新证书,请添加 -Certstorelocation Cert:\CurrentUser\My 参数 或在受信任的根证书颁发机构存储中使用 Cert:\LocalMachine\Root

下面的屏幕截图显示了创建证书并显示其所有属性后的预期结果。您可以看到 selfsignedcertificate cmdlet 自动将 CN= 前缀添加到使用者名称中。

[玩转系统] New-SelfSignedCertificate:使用 PowerShell 创建证书

创建使用者备用名称 (SAN) 证书

您已经创建了一个具有单个主题名称的证书,如果您要将其部署到一个网站,这很好。但是,如果您有多个网站,例如 localsite.com、 content.localsite.comapps.localsite.com,该怎么办?

您可以创建一个具有多个使用者备用名称 (SAN) 的证书,而不是为每个网站创建自签名证书。这种类型的证书称为 SAN 证书。

要创建 SAN 证书,请运行带有 DnsName 参数的 New-SelfSignedCertificateDnsName 参数接受您想要包含在证书中的一个或多个使用者名称。

当您为 DnsName 参数提供多个值时,DnsName 参数中的第一个字符串将显示为证书的主要使用者名称。其他名称将是替代名称。无论哪个主题名称是主要的,都不会影响证书的可用性,并且功能相同。

例如,要为 localsite.comcontent.localsite.comapps.localsite.com 创建 SAN 证书,请运行以下命令下面在 PowerShell 中。

# Create a self-signed SAN certificate in the local machine personal certificate store and store the result in the $cert variable.
$cert = New-SelfSignedCertificate -DnsName localsite.com,content.localsite.com,apps.localsite.com
# Display the new certificate properties
$cert | Format-List -Property *

如下所示,cmdlet 创建了一个具有多个使用者名称的新证书,如 DnsNameList 属性中所示。

[玩转系统] New-SelfSignedCertificate:使用 PowerShell 创建证书

创建具有特定有效期的证书

默认情况下,自签名证书的有效期为一年,这对于大多数用例来说已经足够了。但如果您在创建自签名证书时需要指定具体的有效期,可以添加 NotBeforeNotAfter 参数。

例如,要创建今天 NotBefore 和 24 个月后 NotAfter 有效的自签名证书,请在 PowerShell 中运行以下命令。

# Create a self-signed certificate in the local machine personal certificate store valid for 24 months and store the result in the $cert variable.
$cert = New-SelfSignedCertificate -DnsName localsite.com -NotAfter (Get-Date).AddMonths(24)

要确认新证书,请运行以下命令以显示证书的选择属性,包括开始日期和到期日期。

$cert | Select-Object -Property Subject,Thumbprint,NotBefore,NotAfter

从结果中可以看到,您现在拥有一个有效期为 24 个月的自签名证书。

[玩转系统] New-SelfSignedCertificate:使用 PowerShell 创建证书

克隆现有的自签名证书

假设您的自签名证书即将过期。如果您仍然需要该证书,那么合乎逻辑的操作是更新它。但没有直接的方法来更新证书。你做什么工作?从头开始创建新的自签名证书或克隆现有证书。

克隆旧证书使新证书继承旧证书的属性,但不包括公钥、指纹、序列号和到期日期。因此,克隆旧证书是更快的选择。

要克隆证书,请将 CloneCert 参数添加到 New-SelfSignedCertificate 命令中。请按照以下步骤操作:

1. 首先,找到您要克隆的证书。为此,请运行 Get-ChildItem 命令列出证书存储中的现有证书。在下面的代码片段中,PowerShell 正在搜索本地计算机的证书存储,查找主题以字符串 localsite.com 结尾的所有证书,并返回一些证书属性。

# Get all certificates whose Subject name is like localsite.com.
 Get-ChildItem Cert:\LocalMachine\My | Where-Object {$_.Subject -like "*localsite.com"} | Select-Object Subject,DnsNameList,Thumbprint,NotBefore,NotAfter

如下所示,可能有多个证书与您搜索的主题名称相匹配。在这种情况下,请检查证书列表以确定要克隆哪个证书。做出决定后,复制证书的指纹。

[玩转系统] New-SelfSignedCertificate:使用 PowerShell 创建证书

2. 现在您已经确定了要克隆的证书并复制了其指纹,请运行以下命令来检索旧证书。确保将 Thumbprint 值更改为您在上一步中复制的指纹。

# Get the certificate and store it in the $certToClone variable
 $certToClone = Get-Item Cert:\LocalMachine\My\

3. 接下来,通过运行带有 CloneCert 参数的 New-SelfSignedCertificate 克隆原始证书来创建新证书。

# Create cloned self-signed certificate
 $cert = New-SelfSignedCertificate -CloneCert $certToClone

如果不指定 NotBeforeNotAfter 参数,新证书将与旧证书具有相同的有效期(即两年)。 NotBefore 值将是当前日期和时间减去十分钟。

或者,要为新证书指定不同的有效期,请运行相同的命令,但添加 NotAfter 参数。例如,要使证书的有效期为四年,请运行以下命令。

# Create cloned self-signed certificate valid for four years
 $cert = New-SelfSignedCertificate -CloneCert $certToClone -NotAfter (Get-Date).AddYears(4)

4. 最后,运行以下命令来验证您创建的新证书。

# Display the cloned certificate properties
 $cert | Select-Object Subject,DnsNameList,Thumbprint,NotBefore,NotAfter

如下所示,您现在已经克隆了自签名证书,其主题和备用名称与原始证书相同。指纹、开始日期和到期日期是新的。

[玩转系统] New-SelfSignedCertificate:使用 PowerShell 创建证书

创建代码签名证书

为了确保您的脚本或代码具有数字签名,您必须使用代码签名证书对脚本进行签名。 New-SelfSignedCertificate cmdlet 也能够创建代码签名证书。

要创建自签名代码签名证书,请在 PowerShell 中运行下面的 New-SelfSignedCertificate 命令。 Type 参数指定创建 CodeSigningCert 证书类型。该证书的有效期为 24 个月。请注意,可以使用 NotAfter 参数指定特定的有效期。

# Create a self-signed code signing certificate valid for 24 months.
$cert = New-SelfSignedCertificate -Subject CodeSigningCert -NotAfter (Get-Date).AddMonths(24) -Type CodeSigningCert

生成代码签名证书后,运行以下命令以确认 EnhancedKeyUsageList 值显示证书的有效密钥用法为 Code Signing

$cert | Select-Object Subject,EnhancedKeyUsageList

[玩转系统] New-SelfSignedCertificate:使用 PowerShell 创建证书

创建文档加密证书

当您想要保护文档或电子邮件等内容免遭窥探时,加密是保护它们的一种方法。但首先,您需要一种用于文档加密的证书,您也可以使用 New-SelfSignedCertificate cmdlet 创建该证书。

要创建文档加密证书,New-SelfSignedCertificate cmdlet 需要一组特定的 KeyUsage 值。这些值是:

  • 数据加密 - 该证书对于加密数据有效。
  • KeyEncipherment - 该证书对于加密秘密/私钥是有效的。
  • 密钥协议 - 该证书对于派生加密密钥有效,例如在椭圆曲线加密中。

此外,Type 参数值必须为 DocumentEncryptionCert

运行以下命令创建用于文档加密的自签名证书。该证书的有效期为两年。为了使命令更具可读性,下面的代码使用展开来定义参数值。

由于加密内容通常供个人使用,因此在当前用户个人证书存储中创建文档加密证书是合适的。这样做会将证书限制为当前用户(您)才能加密和解密内容。

# Define the certificate parameter values
$certSplat = @{
	DnsName = 'DocEncCert'
	KeyUsage = @('KeyEncipherment','DataEncipherment','KeyAgreement')
	Type = 'DocumentEncryptionCert'
	CertStoreLocation = 'Cert:\CurrentUser\My'
	NotAfter = (Get-Date).AddYears(2)
}
# Create the self-signed document encryption certificate
$cert = New-SelfSignedCertificate @certSplat

接下来,要验证自签名证书对于代码签名是否有效,请运行以下命令以获取证书的 EnhancedKeyUsageList 值。

$cert | Select-Object Subject,EnhancedKeyUsageList

从下面的结果中可以看到,证书列出了Document Encryption,这意味着该证书可用于文档加密。

[玩转系统] New-SelfSignedCertificate:使用 PowerShell 创建证书

现在您已拥有文档加密证书,您可以使用 Protect-CmsMessageUnprotect-CmsMessage cmdlet 加密和解密内容。

结论

本文旨在教您如何快速获取自签名证书以满足您的测试和开发需求。您学习了如何使用不同的参数并出于不同的目的创建自签名证书。

您可以探索本文未涵盖的更多参数。创建 S/MIME 证书来保护电子邮件或使用更强大算法的证书怎么样?您可能还想了解如何导出和导入这些证书。祝你好运!

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

取消回复欢迎 发表评论:

关灯