PVK数字证书文件导入器
在生成数字证书时,有时私钥存储在PVK (private key)文件中,对应的数字证书存储在SPC (Software Publishing certificate)文件中。例如,当从Verisign或Thawte获取代码签名证书时,数字证书将以SPC和PVK文件组合的形式颁发给您。如果希望使用代码签名证书对PowerShell脚本或配置文件进行数字签名,则必须将SPC和PVK文件组合导入到个人证书存储中。
证书存储区是驻留在用于存储证书信息的计算机或设备上的位置。在Windows中,您可以使用Certificates MMC管理单元显示用户、计算机或服务的证书存储。您的个人证书存储指的是您自己的“用户”证书存储。
要导入SPC + PVK,您使用Microsoft工具,叫做PVK数字证书文件进口商。您可以从Microsoft下载网站下载http://www.microsoft.com/downloads/details.aspx?FamilyID=F9992C94-B129-46BC-B240-414BDFF679A7&displaylang=EN。
接下来,输入以下命令导入SPC+PVK,替换您自己的文件名:
pvkimprt mycertificate进口”。程控myprivatekey.pvk”
签署PowerShell脚本
在签名PowerShell脚本时,使用设置AuthenticodeSignature小命令,这需要两个必需的参数。第一个参数,文件路径,是要进行数字签名的脚本或文件的路径和文件名。第二个参数,证书,是用于签名脚本或文件的X.509证书。要获取格式为设置AuthenticodeSignatureCmdlet理解,您将证书作为对象检索Get-ChildItem.Cmdlet,如下例所示:
PS C:\>设置authenticodesignature -FilePath signed.ps1 -certificate @(GET-childitem证书:\ CurrentUser \我-codeSigningCert)[0] -includeChain “全部”目录:C: \SignerCertificate状态路径----------------- ------ ----5 cbce258711676061836bc45c1b4aca6f6c7d09e有效signed.ps1PS C:\>
要检索您从自己的“用户”证书存储所需的证书,您使用Get-ChildItem.与该cmdletcodeSigningCert SwitchParameter。此SwitchParameter只能与PowerShell证书提供程序一起使用,并作为过滤器强制Get-ChildItem.Cmdlet只检索代码签名证书。最后,为了确保数字签名中包含了整个证书链includeChain参数使用。
之后设置AuthenticodeSignature小命令已成功执行,已签署的文件有一个包含数字签名的有效数字签名块。在PowerShell脚本或配置文件中的签名块始终是文件中的最后一个项目,因为它是封闭之间可以很容易找到SIG #开始签名块和SIG#结束签名块,如下所示:
写主机( “这是一个脚本签署!”)-Foregroundcolor绿色#SIG#开始签名块#MIIIHQYJKoZIhvcNAQcCoIIIDjCCCAoCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB#gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR#AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUOBxWZ + ceVCY8SKcVLl / 3iq2F#w0OgggYVMIIGETCCBPmgAwIBAgIKcsuBWwADAAAAIzANBgkqhkiG9w0BAQUFADBE ...#KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwIwYJKoZIhvcNAQkEMRYEFG + QcdwH#dHiuftHilhdyHCeSl0UgMA0GCSqGSIb3DQEBAQUABIGAZxItZJ + uo1E / cVhOCFex#9hinxULa3s0urQi362qa +NQ7yV3XczQOAPl0 / kBIrEcwFN6YyS7PPm0wkCAPnfib#4J3uKxZK + 4l9iHTiEVmp1ZO5G + P3KrqUS9ktFs7v9yTgqc8JLznxsRLvMwZpAMBO#R2792YGWH5Jy4AwDYeljQ6Y =#SIG#结束签名块
这个过程进行数字签名的脚本也适用于PowerShell的配置文件。正如在第3章,配置文件,这取决于执行策略设置,可能还需要它们加载到PowerShell会话之前签署。
验证数字签名
要验证PowerShell脚本和配置文件的数字签名,可以使用Get-AuthentiCodeSignaturecmdlet。它返回一个有效的状态或无效状态,如HashMismatch,表示文件有问题。
有效的状态:
PS C:\> GET-authenticodesignature signed.ps1目录:C: \SignerCertificate状态路径----------------- ------ ----5 cbce258711676061836bc45c1b4aca6f6c7d09e有效signed.ps1PS C:\> \ signed.ps1。这是有签名的剧本!PS C:\>
无效的状态:
PS C:\> GET-AuthenticodeSignature signed.ps1目录:C: \SignerCertificate状态路径----------------- ------ ----5CBCE258711676061836BC45C1B4ACA6F6C7D09E HashMismatch signed.ps1PS C:\ \ signed.ps1。签署的文件C: \。Ps1无法加载。文件D:\ signed的内容。Ps1可能已被篡改,因为文件的哈希值与存储在数字签名中的哈希值不匹配。该脚本将不会在系统上执行。请参阅“get-help about_signing”了解更多细节。在行:1字符:12+ \ signed.ps1 <<<<PS C:\>
根据前面的例子中的误差,该脚本已被修改或篡改或已损坏。如果脚本已经被其所有者修改,必须重新签署后才能使用它。如果脚本已被篡改或已损坏,应该丢弃,因为它的有效性和真实性能不再被信任。
签名代码分发
分发签名的PowerShell脚本和配置文件需要用户决定是否信任来自特定发布者的代码。第一步是基于信任链验证发布者的身份。为了建立信任链,用户使用与数字签名相关联的发布者的代码签名证书来验证证书所有者确实是发布者。例如,图4.5显示有效证书从发布者的证书到受信任的根证书(或信任锚)的完整路径(或链)。
证书路径
当一个知名的受信任的公共根CA或内部受信任的根CA是发布者证书的信任锚时,用户显式地信任发布者的身份声明是真实的。
对于Windows用户来说,如果根CA被认为是可信的,该CA的证书驻留在受信任的根证书颁发机构的证书存储(见图4.6)。
可信root认证机构证书商店
当根CA是不是一个有效的信任锚或证书是自签名,用户需要决定是否信任发布者的身份要求。如果用户确定身份的要求是有效的,根CA的证书或自签名证书应加入到受信任的根证书颁发机构的证书存储来建立信任的有效链。
在验证或信任发布者的身份之后,下一步是确定已签名代码是否可以安全执行。如果用户之前已经确定来自发布者的代码可以安全执行,那么代码(PowerShell脚本或配置文件)无需用户进一步操作就可以运行。
对于Windows用户,如果发布者被认为是受信任的,则其代码签名证书驻留在受信任发布者证书存储区中(请参阅图4.7)。
可信发布者证书存储
如果发行人不被信任,PowerShell中提示用户来决定是否从发布服务器上运行签名的代码,如本例所示:
PS C:\> \ signed.ps1。你想从这个不可信发布服务器上运行的软件?签署的文件C: \。ps1由CN=companyabc.com, OU=IT出版,O=companyabc.com, L=Oakland, S=California, C=US系统。只有运行来自可信发布者的脚本。【答案】[A] Always)帮助(默认为 “d”):
以下列表解释了可用的选项:
[V]从来没有运行- 此选项会将发布商的用户不受信任的证书证书存储证书。发布者的证书已被确定为不可信之后,PowerShell中从未允许从发行代码运行,除非证书从不受信任的证书证书存储区或执行策略取下设为无限制或者RemoteSigned。
[d]不跑-这个选项是默认的,暂停不受信任代码的执行。
[R]运行一次- 该选项允许不可信代码的一次执行。
(一)总运行- 此选项会将发布商的用户的可信发行商证书存储证书。此外,根CA的证书放在受信任的根证书颁发机构的证书存储,如果它已不存在。
企业代码分布
你可能想知道如何控制哪些代码是在您的组织认为可信的。很显然,有用户或计算机决定如何信任击败在托管环境中分发签名代码的目的。如果您的环境管理,您的PKI部署应该具有控制什么在组织信任的方法。如果您的组织是一个Windows环境下,最常见的方法是通过GPO。例如,您可以通过使用证书信任列表(CTL)定义信任的发布者或管理他们通过Internet Explorer维护扩展。
公共代码发行
在公共领域确定的信任是完全不同的。当建立两个私人实体之间的信任,他们能够定义是什么,不被信任。当公共机构打交道时,你没有这个级别的控制。它是由那些公共实体,以确定他们做什么或不信任。
概括
总之,这一章中,正如它的名字建议,是在深入探索代码签名。基于你已经从本章收集的信息,您现在应该有多么重要代码签名是PowerShell的安全,以及如何使用它的理解。如果你还没有来到这个实现,那么它再次强调,代码签名理解并配合您的脚本开发活动中使用。
除了强调使用代码签名的,你也应该现在有更好的理解为是为了让代码签署一个组织内信任的代码可行的方法所需的基础设施。诚然,而PKI可能很难理解,本章的主要目标之一是从已与该拍摄于努力减少困惑的量,你的脚本活动,做法的角度解释PKI你部分,通过与PKI的东西,是适用于它将如何使用PowerShell来使用。有了这些知识,您现在应该能够确定,或者至少传达,PKI的需求,并希望移动项目的推进,这样你开发的脚本可以在您的组织的信任。
版权所有©2007培生教育。保留所有权利。