关于PowerShell中创建受信任的脚本

  自从研究PowerShell以来,经历了很多,过程是很艰辛啊。尤其是当我去网络上搜索关于PowerShell的资料的时候,我发现找到的很少,甚至是少得可怜。或者可以说是一篇文章,大家互相转载,Google几页以后,发现的资料基本如出一辙。没办法,只能自己研究。

  由于要用到执行策略的更改,所以涉及到自己创建受信任脚本。可是网上的资料讲的不是很详细,我按照上面的步骤基本没有通过的,所以只能自己研究。

  废话就不多说了,写一下怎么创建受信任的脚本。创建受信任脚本,要用到的工具:makecert.exe(证书创建工具)大家可以从微软官方下载。

  然后根据网上的资料,我们只需要在PowerShell的命令行里执行makecert 就可以,但我试了很多次也没有成功。在cmd命令行里可以直接运行makecert.exe,但在PS环境里就不能成功。后来才发现,网上没有说清楚,我们需要把makecert.exe文件拷贝到我们的系统文件夹下,否则我们在PS中使用makecert.exe的时候系统会提示找不到命令。

  ok,只要在环境里可以运行makecert.exe,我们就可以进行下一步的操作了。
  命令:makecert -n "CN=MyRoot" -a sha1 –eku1.3.6.1.5.5.7.3.3 -r -sv root.pvk root.cer –ss Root -sr localMachine ,完成以后会弹出对话框,让我们输入私钥密码,输入并确认。

  输入命令:makecert -pe -n "CN=MyCertificate" -ss MY –a sh1 -eku 1.3.6.1.5.5.7.3.3 -iv root.pvk –c root.cer,作用是开始创建证书。执行完成后,我们可以在 Windows PowerShell 中运行以下代码,以核实此安装过程:gci cert:/CurrentUser/My -codesigning 。 这将在 CERT: drive(Windows 证书存储位置)中显示所有代码签名证书项目的列表。此外,所有这一切还将被记录在 Windows PowerShell 自身中。要查找该文档,只需运行 help About_Signing 然后向下翻阅几个屏幕即可。

  所有步骤都完成了,我们就可以进行脚本的签名了。$cert = @(gci cert:/currentuser/my-codesigning)[0]这句命令用来检索首次安装的代码签名证书(如果安装了多个证书并希望使用第一个以外的其他证书,只需将 "0" 改为相应的数字即可)。

  Set-AuthenticodeSignature D:/myscript.ps1 $cert这个代码则进行脚本的签名。现在我们打开脚本,我们可以看到签名区块被插入到底部。尝试使用执行策略 AllSigned (Set-ExecutionPolicy AllSigned) 运行脚本,它就能够正常工作。现在我们可以尝试修改脚本并保存它,但要确保没有再次对它进行签名。Windows PowerShell 现在应该会拒绝运行修改后的版本,因为签名已被破坏。

  那么我们创建受信任脚本的操作就完成了。下面是makecert的一些参数

选项 说明

-n x509name

指定主题的证书名称。此名称必须符合 X.500 标准。最简单的方法是在双引号中指定此名称,并加上前缀 CN=;例如,"CN=myName"。

-pe

将所生成的私钥标记为可导出。这样可将私钥包括在证书中。

-sk keyname

指定主题的密钥容器位置,该位置包含私钥。如果密钥容器不存在,系统将创建一个。

-sr location

指定主题的证书存储位置。Location 可以是 currentuser(默认值) localmachine

-ss store

指定主题的证书存储名称,输出证书即存储在那里。

-# number

指定一个介于 1 和 2,147,483,647 之间的序列号。默认值是由 Makecert.exe 生成的唯一值。

-$ authority

指定证书的签名权限,必须设置为 commercial(对于商业软件发行者使用的证书)或 individual(对于个人软件发行者使用的证书)。

-?

显示此工具的命令语法和基本选项列表。

-!

显示此工具的命令语法和扩展选项列表。

选项 说明

-a algorithm

指定签名算法。必须是 md5(默认值)或 sha1

-b mm/dd/yyyy

指定有效期的开始时间。默认为证书的创建日期。

-cy certType

指定证书类型。有效值是 end(对于最终实体)和 authority(对于证书颁发机构)。

-d name

显示主题的名称。

-e mm/dd/yyyy

指定有效期的结束时间。默认为 12/31/2039 11:59:59 GMT。

-eku oid[,oid]

将用逗号分隔的增强型密钥用法对象标识符 (OID) 列表插入到证书中。

-h number

指定此证书下面的树的最大高度。

-ic file

指定颁发者的证书文件。

-ik keyName

指定颁发者的密钥容器名称。

-iky keytype

指定颁发者的密钥类型,必须是 signatureexchange 或一个表示提供程序类型的整数。默认情况下,可传入 1 表示交换密钥,传入 2 表示签名密钥。

-in name

指定颁发者的证书公用名称。

-ip provider

指定颁发者的 CryptoAPI 提供程序名称。

-ir location

指定颁发者的证书存储位置。Location 可以是 currentuser(默认值)或 localmachine

-is store

指定颁发者的证书存储名称。

-iv pvkFile

指定颁发者的 .pvk 私钥文件。

-iy pvkFile

指定颁发者的 CryptoAPI 提供程序类型。

-l link

到策略信息的链接(例如,一个 URL)。

-m number

以月为单位指定证书有效期的持续时间。

-nscp

包括 Netscape 客户端身份验证扩展。

-r

创建自签署证书。

-sc file

指定主题的证书文件。

-sky keytype

指定主题的密钥类型,必须是 signatureexchange 或一个表示提供程序类型的整数。默认情况下,可传入 1 表示交换密钥,传入 2 表示签名密钥。

-sp provider

指定主题的 CryptoAPI 提供程序名称。

-sv pvkFile

指定主题的 .pvk 私钥文件。如果该文件不存在,系统将创建一个。

-sy type

指定主题的 CryptoAPI 提供程序类型。

  希望我写的能对研究PowerShell的人有所帮助。如果大家想了解PowerShell,可以去微软官方的Webcast上去搜索我讲的关于PowerShell的课程。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值