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

[玩转系统] 使用 Yubikey 上的证书保护 PowerShell 机密

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

使用 Yubikey 上的证书保护 PowerShell 机密


介绍

有时您需要存储机密,PowerShell 提供了一种使用 *-CMSMessage cmdlet 为您加密文本的好方法! 现在,如果我希望其他人能够加密信息而无法再次解密,或者如果我想自己加密某些内容并且只能通过特定的过程(例如从某个程序中检查解密密钥)来解密它,该怎么办?安全存储?无论哪种方式,将解密密钥存储在 Yubikey 上都是一个不错的选择!

我之前写过一些关于在 PowerShell 中使用 Yubikeys 的文章,您可以在这里找到它们:

  • 设置 Yubikey 进行 PowerShell 代码签名
  • 使用 Yubikey 进行 PowerShell 代码签名

够了,让我们开始吧!

创建证书

为了加密和解密机密,我们将使用 cmdlet Protect-CMSMessage 和 Unprotect-CMSMessage。为了保护(加密)消息,我们需要证书中的公钥,而要取消保护(解密)同一消息,我们需要访问关联的私钥。

在我的示例中,我将创建一个自签名证书,您可以从自己的 PKI 颁发类似的证书,也可以从任何公共提供商处购买一个。

首先,我将创建一个包含一些设置的 inf 文件,并使用 certreq 为自己签名证书。当然,我们使用 PowerShell 来实现这一点。您当然应该用适合您的内容替换主题和友好名称。

@'
[Version]
Signature = "$Windows NT$"

[Strings]
szOID_ENHANCED_KEY_USAGE = "2.5.29.37"
szOID_DOCUMENT_ENCRYPTION = "1.3.6.1.4.1.311.80.1"

[NewRequest]
Subject = "[email "
FriendlyName = "Simon CMS"
MachineKeySet = false
KeyLength = 2048
KeySpec = AT_KEYEXCHANGE
HashAlgorithm = Sha256
Exportable = true
RequestType = Cert
KeyUsage = "CERT_KEY_ENCIPHERMENT_KEY_USAGE | CERT_DATA_ENCIPHERMENT_KEY_USAGE"
ValidityPeriod = "Years"
ValidityPeriodUnits = "1"

[Extensions]
%szOID_ENHANCED_KEY_USAGE% = "{text}%szOID_DOCUMENT_ENCRYPTION%"
'@ | Out-File -FilePath MyCert.inf
certreq -new MyCert.inf MyCert.cer

这应该将带有私钥的证书导入到您的证书存储中,在当前目录中创建包含公钥的 MyCert.cer 并为您提供类似于以下内容的输出:

Installed Certificate:
  Serial Number: 54ccbdaf31a10abe4cd700757a71130f
  Subject: [email 
  NotBefore: 10/2/2018 4:21 PM
  NotAfter: 10/2/2019 4:31 PM
  Thumbprint: 9f6a619dbd6a742fa6cf7af94ace3c42fb7366f8
  Friendly Name: Simon CMS
  Microsoft Strong Cryptographic Provider
  9b7cdfe5f228af229303e2b1ae6d0d5a_266ee505-0860-41b2-be89-617291bb724e

为了确保跟踪它,我复制了指纹并将其存储在变量中。我还将使用 Get-Item 在商店中获取对我新创建的证书的引用,并将证书及其私钥导出到 pfx 文件。运行 Export-PfxCertificate 将要求输入密码,选择一个您能记住的密码。

$Thumbprint = '9f6a619dbd6a742fa6cf7af94ace3c42fb7366f8'
$OrgCert = Get-Item -Path "cert:\currentuser\my$Thumbprint"
Export-PfxCertificate -Cert $OrgCert -FilePath MyCert.pfx -Password (Read-Host -AsSecureString -Prompt 'Password')

将证书放在我的 Yubikey 上

接下来,我将使用 yubico-piv-tool 将证书存储在我的 Yubikey 上。您可以从 Yubico 下载最新版本。我使用的是1.4.4版本。

为了不必输入该工具的完整路径,我为其创建了一个别名。在我的计算机上,该文件位于 Program Files (x86) 中,您可能需要调整路径以适合您的计算机。这会将 MyCert.pfx 导入到 Yubikey 上的插槽 9d(确保您不会覆盖重要的内容!),并要求您输入在上一步中设置的密码。

Set-Alias yubico-piv-tool "C:\Program Files (x86)\Yubico\YubiKey PIV Manager\yubico-piv-tool.exe"
yubico-piv-tool -s 9d -i MyCert.pfx -K PKCS12 -a set-chuid -a import-key -a import-cert

现在,当证书安全地存储在我的 Yubikey 上时,我可以从我的计算机中删除 Ubikey,并从我的商店和 PFX 文件中删除原始证书。此后,我的证书的私钥仅存储在我的 Yubikey 上,没有它我将无法解密任何内容。

$OrgCert | Remove-Item
'MyCert.pfx' | Remove-Item

就是这样!我们来尝试一下吧!

要加密消息,我只需要公钥。该数据由 certreq 存储在 MyCert.cer 中,我可以通过将 cer 文件的完整路径提供给 Protect-CMSMessage 的 -To 参数来加密某些内容。当我尝试取消保护同一条消息时,系统要求我连接我的智能卡 (Yubikey)。

[玩转系统] 使用 Yubikey 上的证书保护 PowerShell 机密

去加密一些东西吧!

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

取消回复欢迎 发表评论:

关灯