主題
about_signing
簡短說明
說明如何對腳本進行簽名以使其符合 Windows PowerShell 執行策略。
詳細說明
Restricted 執行策略不允許任何腳本運行。
AllSigned 和 RemoteSigned 執行策略可防止 Windows PowerShell 運行沒有數字籤
名的腳本。
本主題說明如何運行所選未簽名腳本(即使在執行策略爲 RemoteSigned 的情況下)
,還說明如何對
腳本進行簽名以便您自己使用。
有關 Windows PowerShell 執行策略的詳細信息,請參閱 about_Execution_Policy。
允許運行簽名腳本
-------------------------------
首次在計算機上啓動 Windows PowerShell 時,現用執行策略很可能是 Restricted(
默認設置)。
Restricted 策略不允許任何腳本運行。
若要了解計算機上的現用執行策略,請鍵入:
get-executionpolicy
若要在本地計算機上運行您編寫的未簽名腳本和來自其他用戶的簽名腳本,請使用以
下命令將計算機上的
執行策略更改爲 RemoteSigned:
set-executionpolicy remotesigned
有關詳細信息,請參閱 Set-ExecutionPolicy。
運行未簽名腳本(REMOTESIGNED 執行策略)如果 Windows PowerShell 執行策略是
RemoteSigned,Windows PowerShell 不會運行從 Internet 下載的未簽名腳本,包括您
通過電子郵
件和即時消息傳遞程序接收到的未簽名腳本。
如果您試圖運行下載的腳本,則 Windows PowerShell 將顯示以下錯誤消息:
無法加載文件 <file-name>。文件
<file-name> 未經數字簽名。系統將
不執行該腳本。有關詳細信息,請參閱"Get-Help about_signing"。
在運行該腳本前,請檢查其代碼以確保該腳本可信。
腳本與任何可執行程序具有同樣的效用。
若要運行未簽名腳本,請執行以下操作:
1. 將腳本文件保存在計算機中。
2. 依次單擊"開始"和"我的電腦",然後找到保存的腳本文件。
3. 右鍵單擊該腳本文件,然後單擊"屬性"。
4. 單擊"取消阻止"。
如果從 Internet 下載的腳本具有數字簽名,而您尚未選擇信任其發佈者,則 Window
s PowerShell
將顯示以下消息:
是否要運行來自此不可信發佈者的軟件?文件 <file-name> 由 CN=<publisher-na
me> 發佈。
此發佈者在您的系統上不受信任。請只運行來自可信發佈者的腳本。
[V] 從不運行 [D] 不運行 [R] 運行一次 [A] 始終運行 [?] 幫助(默認值爲"D")
:
如果您信任發佈者,請選擇"運行一次"或"始終運行"。如果您不信任發佈者,
則請選擇"從不運行"或"不運行"。如果選擇"從不運行"或"始終運行",Windows P
owerShell
不會再次提示您對來自此發佈者的腳本作出選擇。
對腳本進行簽名的方法
--------------------------
可以對您編寫的腳本以及從其他來源獲得的腳本進行簽名。在對任何腳本進行簽名前
,
請檢查每條命令以驗證運行此腳本是否安全。
有關對代碼進行簽名的最佳做法,請參閱 http://go.microsoft.com/fwlink/?LinkId
=119096
上的"代碼簽名最佳做法"。
有關如何對腳本文件進行簽名的詳細信息,請參閱 Set-AuthenticodeSignature。
若要爲腳本添加數字簽名,則必須使用代碼簽名證書對其進行簽名。可使用以下兩種
類型的證書對腳本文件進行簽名:
-- -- 由證書頒發機構創建的證書:
公共證書頒發機構可驗證您的身份並向您頒發代碼簽名證書,但要收取費用。
在從可信的證書頒
發機構購買證書之後,您就可以與運行 Windows 的其他計算機上的用戶共享
腳本,這是因爲這些
計算機信任該證書頒發機構。
-- -- 您創建的證書:
您可以創建自簽名證書,而您的計算機就是創建該證書的頒發機構。
此證書是免費的,有了此證書,您便可在自己的計算機上編寫腳本、對腳本進
行簽名以及運行腳本。
但是,自簽名證書所簽名的腳本在其他計算機上不會運行。
通常,您只使用自簽名證書對以下兩類腳本進行簽名:一種是您自編自用的腳本,另
一種是您
從其他來源獲取的已確認安全的腳本。自簽名證書不適用於將與他人共享的腳本,甚
至在企業範圍
內共享的腳本。
如果您創建了自簽名證書,請確保爲您的證書啓用強私鑰保護。這樣可防止惡意程序
以您的名義對腳本進行簽名。
本主題的最後提供了相關說明。
創建自簽名證書
--------------------------------
若要創建自簽名證書,請使用證書創建工具 (MakeCert.exe)。在 Microsoft .NET Fr
amework SDK
(版本 1.1 和更高版本)以及 Microsoft Windows SDK 中包含了此工具。
有關 MakeCert.exe 工具語法的詳細信息及其參數說明,請參閱 MSDN(Microsoft De
veloper Network)
Library 中的"證書創建工具 (MakeCert.exe)",網址爲
http://go.microsoft.com/fwlink/?LinkId=119097。
若要使用 MakeCert.exe 工具創建證書,請在 SDK 命令提示符窗口中運行以下命令。
注意:第一條命令將爲計算機創建本地證書頒發機構。第二條命令從該證書頒發機構
生成個人證書。
注意:您可以按原樣複製或鍵入顯示的命令。
不必進行任何替換,不過可更改證書名稱。
makecert -n "CN=PowerShell Local Certificate Root" -a sha1 `
-eku 1.3.6.1.5.5.7.3.3 -r -sv root.pvk root.cer `
-ss Root -sr localMachine
makecert -pe -n "CN=PowerShell User" -ss MY -a sha1 `
-eku 1.3.6.1.5.5.7.3.3 -iv root.pvk -ic root.cer
MakeCert.exe 工具將提示您輸入私鑰密碼。該密碼可確保無人能夠不經您的同意就使
用或訪問該證
書。應創建並輸入您可以記住的密碼。您將在以後使用此密碼檢索該證書。
要驗證是否正確生成了證書,請使用以下命令從計算機上的證書存儲區中獲取該證書
。
(在文件系統目錄中找不到證書文件。)
在 Windows Powershell 提示符下,鍵入:
get-childitem cert:\CurrentUser\my -codesigning
此命令使用 Windows PowerShell 證書提供程序來查看該證書的相關信息。
如果該證書已創建完成,則輸出將顯示標識該證書的指紋,如下所示:
Directory: Microsoft.PowerShell.Security\Certificate::CurrentUser\My
Thumbprint Subject
---------- -------
4D4917CB140714BA5B81B96E0B18AAF2C4564FDF CN=PowerShell User ]
對腳本進行簽名
-------------
如果創建了自簽名證書,則可對腳本進行簽名。如果使用 AllSigned 執行策略,則對
腳本進行簽名後,
您就可在計算機上運行該腳本。
以下示例腳本 Add-Signature.ps1 對一個腳本進行簽名。但如果使用的是 AllSigned
執行策略,則
必須先對 Add-Signature.ps1 腳本進行簽名,然後才能運行該腳本。
若要使用此腳本,請將以下文本複製到一個文本文件中並將該文件命名爲 Add-Signat
ure.ps1。
注意:請確保該腳本文件沒有 .txt 文件擴展名。如果文本編輯器向文件名追加".txt
",則請將文件名
括在引號中:"add-signature.ps1"。
## add-signature.ps1
## Signs a file
param([string] $file=$(throw "Please specify a
filename.")) $cert = @(Get-ChildItem cert:\CurrentUser\My -
codesigning)[0] Set-AuthenticodeSignature $file $cert
若要對 Add-Signature.ps1 腳本文件進行簽名,請在 Windows PowerShell 命令提示
符下鍵入以
下命令:
$cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
Set-AuthenticodeSignature add-signature.ps1 $cert
在對腳本進行簽名之後,即可在本地計算機上運行該腳本。
但是,如果計算機上的 Windows PowerShell 執行策略要求來自可信證書頒發機構的
數字簽名,則此腳
本將無法在該計算機上運行。如果試圖運行此腳本,Windows PowerShell 將顯示以下
錯誤消息:
無法加載文件 C:\remote_file.ps1。無法驗證該證書的簽名。
所在行:1 字符:15
+ .\ remote_file.ps1 <<<<
如果在運行非自編腳本時 Windows PowerShell 顯示此消息,請按照處理任何未簽名
腳本的方式來處理
該文件。請檢查腳本代碼以確定該腳本是否可信。
爲證書啓用強私鑰保護
---------------------------------------------------------
如果您的計算機上具有私有證書,則惡意程序可能會以您的名義對腳本進行簽名,從
而授權 Windows
PowerShell 運行這些腳本。
若要防止以您的名義進行的自動簽名,請使用證書管理器 (Certmgr.exe) 將您的簽名
證書導出到一
個 .pfx 文件中。證書管理器包含在 Microsoft .NET Framework SDK、Microsoft Wi
ndows SDK,以及
Internet Explorer 5.0 及更高版本中。
若要導出證書,請執行以下操作:
1. 啓動證書管理器。
2. 選擇由"PowerShell Local Certificate Root"頒發的證書。
3. 單擊"導出"以啓動證書導出嚮導。
4. 選中"是,導出私鑰",然後單擊"下一步"。
5. 選中"啓用加強保護"。
6. 鍵入密碼,然後再次鍵入密碼進行確認。
7. 鍵入文件擴展名爲 .pfx 的文件名。
8. 單擊"完成"。
若要重新導入證書,請執行以下操作:
1. 啓動證書管理器。
2. 單擊"導入"以啓動證書導入嚮導。
3. 轉到您在導出過程中創建的 .pfx 文件所在的位置。
4. 在"密碼"頁上選中"啓用強私鑰保護",然後輸入在導出過程中所指定的密碼。
5. 選擇"個人"證書存儲區。
6. 單擊"完成"。
防止簽名過期
-----------------------------------
腳本中的數字簽名在簽名證書過期前一直有效;或者,只要時間戳服務器可驗證該腳
本是
在簽名證書有效時進行簽名的,則該數字簽名就有效。
因爲大多數簽名證書的有效期只有一年,所以使用時間戳服務器可確保用戶在未來許
多年內都可使用您的腳本。
另請參閱
about_Execution_Policies
about_Profiles
Get-ExecutionPolicy
Set-ExecutionPolicy
Set-AuthenticodeSignature
"代碼簽名簡介"(http://go.microsoft.com/fwlink/?LinkId=106296)