PVK数字证书文件导入器
当生成数字证书时,有时私钥存储在PVK(私钥)文件中,并且相应的数字证书存储在软件发布证书(SPC)文件中。例如,当从VeriSign或Thawte获得代码证书时,将数字证书作为SPC和PVK文件组合发出。如果要使用代码签名证书来数字化签名PowerShell脚本或配置文件,则必须将SPC和PVK文件组合导入您的个人证书存储。
证书存储是驻留在用于存储证书信息的计算机或设备上的位置。在Windows中,您可以使用证书MMC管理单元来显示用户,计算机或服务的证书存储。您的个人证书商店指的是您自己的“用户”证书商店。
要导入SPC+PVK,您可以使用名为PVK数字证书文件导入器的Microsoft实用程序。你可以从微软下载网站下载http://www.microsoft.com/downloads/details.aspx?familyid=f9992c94-b129-46bc-b240-414bdff679a7&displaylang=en..
接下来,输入以下命令以导入SPC + PVK,替换您自己的文件名:
pvkimprt -import“mycertificate.spc”“myprivatekey.pvk”
签署PowerShell脚本
签署PowerShell脚本时,使用Set-AuthenticodeSignatureCmdlet,它接受两个必需的参数。第一个参数,文件路径,是要数字签名的脚本或文件的路径和文件名。第二个参数,证书,是用于签署脚本或文件的X.509证书。以格式获取X.509证书Set-AuthenticodeSignaturecmdlet了解,您将证书作为对象检索Get-ChildItem.cmdlet,如本例所示:
ps c:\> set-authenticodesignature -filepath签名.ps1-certificate @(get-charitiatem cert:\ currentuser \ my -codesigningcert)[0] -includechain“全部”目录:C:\SignerCertificate状态路径----------------- ------ ----5CBCE258711676061836BC45C1B4ACA6F6C7D09E有效签名.PS1p C: \ >
要从您自己的“用户”证书存储区检索想要的证书,可以使用Get-ChildItem.cmdlet与代号T SwitchParameter。此SwitchParameter只能使用PowerShell证书提供程序,并充当筛选器以强制Get-ChildItem.Cmdlet只检索代码签名证书。最后,为了确保数字签名中包含了整个证书链IncludeChain.使用参数。
后Set-AuthenticodeSignatureCmdlet已成功执行,已签名的文件具有包含该数字签名的有效数字签名块。PowerShell脚本或配置文件中的签名块总是文件中的最后一项,很容易找到,因为它被夹在中间sig#begin签名块和SIG #结束签名块,如这里所示:
write-host(“这是一个签名脚本!”)-Foregroundcolor绿色#团体#开始签名块# MIIIHQYJKoZIhvcNAQcCoIIIDjCCCAoCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB # gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR # AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUOBxWZ + ceVCY8SKcVLl / 3 iq2f #w0OgggYVMIIGETCCBPmgAwIBAgIKcsuBWwADAAAAIzANBgkqhkiG9w0BAQUFADBE……# KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwIwYJKoZIhvcNAQkEMRYEFG + QcdwH # dHiuftHilhdyHCeSl0UgMA0GCSqGSIb3DQEBAQUABIGAZxItZJ + uo1E / cVhOCFex # 9 hinxula3s0urqi362qa + NQ7yV3XczQOAPl0 / kBIrEcwFN6YyS7PPm0wkCAPnfib # 4 j3ukxzk + 4 l9ihtievmp1zo5g + P3KrqUS9ktFs7v9yTgqc8JLznxsRLvMwZpAMBO # R2792YGWH5Jy4AwDYeljQ6Y = #团体#签名块结束
数字签名脚本的此过程也适用于PowerShell配置文件。如第3章中所讨论的,配置文件,根据执行策略设置,可能还需要在将它们加载到PowerShell会话之前签名。
验证数字签名
要验证PowerShell脚本和配置文件的数字签名,请使用get-authenticodeSignature.cmdlet。它返回一个有效状态或一个无效状态,例如hashmismatch.,表示文件的问题。
有效状态:
PS C:\ > get-authenticodesignature signed.ps1目录:C:\SignerCertificate状态路径----------------- ------ ----5CBCE258711676061836BC45C1B4ACA6F6C7D09E有效签名.PS1PS C:\ > .\ signed.ps1这是一个签名的脚本!p C: \ >
状态无效:
ps c:\> get-authenticodesignature签名.ps1目录:C:\SignerCertificate状态路径----------------- ------ ----5 cbce258711676061836bc45c1b4aca6f6c7d09e HashMismatch signed.ps1PS C:\。\签名.PS1文件C:\签名。无法加载。文件D:\签名的内容可能被篡改,因为文件的散列与存储在数字签名中的哈希不匹配。脚本不会在系统上执行。有关详细信息,请参阅“Get-Help about_signing”。行:1字符:12+。\签名.ps1 <<<<p C: \ >
基于上述示例中的错误,说明脚本已被修改、篡改或损坏。如果脚本已被其所有者修改,则必须在使用之前再次对其进行签名。如果脚本被篡改或损坏,则应该丢弃它,因为它的有效性和真实性不再可信。
签署了代码发行版
分发签名的PowerShell脚本和配置文件要求用户确定是否从特定发布者信任代码。第一步是根据信任链验证发布者的身份。要建立一个信任链,用户使用与数字签名关联的发布者的代码签名证书验证证书所有者是否确实是发布者。例如,图4.5显示从发布者证书到可信根证书(或信任锚)的有效证书的不间断路径(或链)。
证书的路径
当众所周知的信任公共根CA或内部受信任的root ca是用于发布者证书的信任锚时,用户明确信任发布者的身份索赔是真实的。
对于Windows用户,如果根CA被认为是受信任的,则该CA的证书驻留在受信任的根证书颁发机构证书存储区中(请参阅图4.6).
受信任的根证书颁发机构证书存储区
当根CA不是有效的信任锚或证书是自签名的时,用户需要决定是否信任发布者的身份声明。如果用户确定身份声明是有效的,则应该将根CA的证书或自签名证书添加到受信任的根证书颁发机构证书存储中,以建立有效的信任链。
在验证或信任发布者的身份后,下一步是决定签名代码是否安全执行。如果用户先前已决定来自发布者的代码是安全的执行,则代码(PowerShell脚本或配置文件)在没有进一步的用户操作的情况下运行。
对于Windows用户,如果被认为是可信的发布者,则其代码签名证书驻留在受信任的发布者证书存储中(请参阅图4.7).
可信出版商证书商店
如果某个发布者不受信任,PowerShell会提示用户决定是否运行该发布者的签名代码,如下例所示:
PS C:\ > .\ signed.ps1您想要运行来自这个不受信任的发布者的软件吗?文件c:\签名.ps1由cn = companyabc.com发布,ou =它,o = companyabc.com,l = oakland,s =加利福尼亚州,c =我们,不值得信赖系统。只运行来自可信发布者的脚本。[v]永远不会运行[d]不运行[r]运行一次[a]始终运行[?]帮助(默认是“D”):
以下列表解释了可用选项:
[V]永远不会跑该选项将发布者的证书放入用户的不受信任的证书存储区。在确定发布者的证书不受信任后,PowerShell永远不允许运行来自该发布者的代码,除非将证书从untrusted Certificates证书存储中删除或将执行策略设置为不受限制的或者empotesigned..
D .不要跑-this选项是默认的,停止执行不受信任的代码。
[r]运行一次-该选项允许一次性执行不受信任的代码。
[a]始终运行-this选项将发布者的证书放在用户可信发布商证书存储中。此外,Root CA的证书被放置在受信任的根证书颁发机构证书存储中,如果它尚未存在。
企业代码分发
您可能想知道如何控制组织中被认为是可信的代码。显然,拥有用户或机器决定信任的内容失败在托管环境中分发签名代码的目的。如果您的环境管理,您的PKI部署应具有控制在组织中受信任的方法的方法。如果您的组织是Windows环境,则最常用的方法是通过GPO。例如,您可以通过使用证书信任列表(CTL)来定义可信发布者或通过Internet Explorer维护扩展管理它们。
公共代码发行版
确定公共领域的信任是完全不同的。在两个私有实体之间建立信任时,它们能够定义什么是可信的,什么是不可信的。当与公共实体打交道时,你没有这种程度的控制。这些公共实体决定他们信任什么或不信任什么。
概括
总之,正如它的名字所暗示的,这一章是对代码签名的深入探索。基于从本章中收集到的信息,您现在应该了解代码签名对PowerShell安全性的重要性,以及如何使用它。如果您还没有认识到这一点,那么再次强调代码签名应该与您的脚本开发活动一起理解和使用。
除了强调代码签名的使用外,您现在还应该更好地了解所需的基础架构,以便在组织中签署可行的方法以便在组织中签署可行的方法。批准,而PKI可能很难理解,本章的主要目标是从与您的脚本活动相关的角度解释PKI - 这是一种努力减少困惑的方法的方法部分,通过将PKI与适用于PowerShell如何使用的东西。通过这种知识,您现在应该能够确定或至少传达,PKI需要,并希望向前移动项目,以便您开发的脚本可以在您的组织中受到信任。
版权所有©2007 Pearson教育。版权所有。