PowerShell簽名和執行策略

來源:互聯網
上載者:User

主題
    簽名和執行策略

簡短說明
    描述 Windows PowerShell 執行策略,以及如何使用和更改它們。

詳細說明

    PowerShell 執行策略通過確定 PowerShell 載入設定檔和運行指令碼的條件,為指令碼環境提供安全性。

    預設設定為最安全的策略“Restricted”。該設定允許運行單個命令,但不允許運行指令碼。

    如果執行策略不允許 PowerShell 負載檔案或運行指令碼,則將顯示警告以解釋該 限制的原因。

        “載入擴充類型資料檔案時出錯:”
 “載入格式資料檔案時出錯:”

    若要負載檔案或運行指令碼,請更改執行策略。

 

更改執行策略
------------------------------
您可以更改電腦上的 PowerShell 執行策略。該更改將立即生效,且一直保持到再次更改時。只有管理員才可更改該策略。

    若要更改執行策略,請鍵入:

 
  1. Set-ExecutionPolicy <策略名稱> 

    例如,

 
  1. Set-ExecutionPolicy RemoteSigned 

如果該命令執行成功,則 PowerShell 將顯示命令提示字元。沒有表示執行成功的訊息。如果該命令失敗,則 PowerShell 將顯示一條錯誤訊息,並還原到先前的執行策略。

    若要查看 PowerShell 執行策略,請鍵入:

 
  1. Get-ExecutionPolicy 

如果該命令執行失敗,則可能是由於拼錯了策略名稱。請檢查該名稱,然後重試。如果您無權運行此命令,請與系統管理員聯絡。

POWERSHELL 執行策略
------------------------------

PowerShell 執行策略包括:

Restricted
        - 預設的執行策略。
        - 允許單個命令運行,但無法運行指令碼。

    AllSigned
        - 可以運行指令碼。
        - 要求可信發行者對所有指令碼和設定檔(包括本機電腦上編寫的指令碼)的
   數位簽章。
 - 在運行來自可信發行者的指令碼之前對您進行提示。
        - 運行已簽名但有惡意的指令碼帶來的風險。

RemoteSigned
        - 可以運行指令碼。
        - 要求可信發行者對從 Internet(包括電子郵件和立即訊息程式)下載的指令碼和設定檔的數位簽章。
 - 無需從本機電腦上啟動並執行指令碼的數位簽章。
 - 在運行來自可信發行者的指令碼之前不向您提示。
        - 運行已簽名但有惡意的指令碼帶來的風險。

    Unrestricted
        - 可以運行未簽名指令碼。
        - 在警告您檔案來源於 Internet 後,運行從 Internet(包括 Microsoft Outlook、Outlook Express 和 Windows Messenger)下載的指令碼和設定檔。
        - 運行惡意指令碼帶來的風險。

運行未簽名指令碼(REMOTESIGNED 執行策略)
--------------------------------------------------------

如果 PowerShell 執行策略為 RemoteSigned,則 PowerShell 將不會運行從Internet(包括電子郵件和立即訊息程式)下載的未簽名指令碼。

如果您試圖運行所下載的指令碼,則 PowerShell 將顯示以下錯誤訊息:

    無法負載檔案 C:\remote.ps1。檔案 C:\remote.ps1 未經數位簽章。無法在系
    統中執行該指令碼。有關詳細資料,請參閱“Get-Help about_signing”。

在運行該指令碼前,請檢查其代碼以確保該指令碼可信。指令碼與任何可執行程式具有同樣的效用。

    若要運行未簽名指令碼,請執行以下操作:

    1. 將指令檔儲存在電腦中。
    2. 依次單擊“開始”、“我的電腦”,然後導航到儲存的指令檔。
    3. 按右鍵該指令檔,然後單擊“屬性”。
    4. 單擊“解除封鎖”。

如果從 Internet 下載的指令碼具有數位簽章,而您尚未選擇信任其發行者,則
PowerShell 將顯示以下訊息:

是否要運行來自此不可信發行者的軟體? 檔案 C:\remote_file.ps1 是由 CN=<發行者名稱> 發布的。此發行者在您的系統上不受信任。請只運行來自可信發行者的指令碼。

    [V] 從不運行  [D] 不運行  [R] 運行一次  [A] 始終運行
    [?] 協助(預設選擇是“D”):

    如果您信任發行者,請選擇“運行一次”或“始終運行”。如果您不信任發行者,則請選擇“從不運行”或“不運行”。如果選擇“從不運行”或“始終運行”,則 PowerShell 將不再針對此發行者提醒您。

對指令碼進行簽名的方法
------------------------------------------

可以對編寫的指令碼以及來自其他源的指令碼進行簽名。在對任何指令碼進行簽名前,請檢查每條命令並驗證運行此指令碼是安全的。

    有關如何在 PowerShell 命令列中對指令檔進行簽名的詳細資料,請鍵入:

 
  1. Get-Help Set-AuthenticodeSignature 

若要為指令碼添加數位簽章,則必須使用程式碼簽署認證對其進行簽名。對指令檔進行簽名可使用以下兩種類型的認證:

    -- 由憑證授權單位建立的認證:

       公用憑證授權單位可驗證您的身份並向您頒發程式碼簽署認證,但要收取費用。
       在從可信的憑證授權單位購買認證之後,您將可以與運行 Windows 的其他計
       算機上的使用者共用該指令碼,因為其他電腦信任該憑證授權單位。

    -- 您建立的認證:

       您可以建立“自我簽署憑證”,而您的電腦就是建立該認證的頒發機構。這類證
       書是免費的,它允許您在您的電腦上編寫、簽名和運行指令碼,但是其他計算
       機不信任您的電腦,可能不會運行該指令碼。

       如果您建立了自我簽署憑證,請確保為您的認證啟用強私密金鑰保護。從而防止惡意
       程式以您的名義對指令碼進行簽名。本主題的最後部分將提供這些說明。

建立自我簽署憑證
-------------------------------------------------------------
若要建立自我簽署憑證,請使用 MakeCert.exe(一種工具,包含在 Microsoft .NETFramework SDK(1.1 及更高版本)和 Microsoft Platform SDK 中)。

若要使用 MakeCert 來建立認證,請執行以下操作:

    在 SDK 命令提示字元視窗中,運行以下命令:

    第一條命令將為電腦建立本地憑證授權單位。第二條命令從該憑證授權單位生
    成個人認證:

 
  1. makecert -n "CN=PowerShell Local Certificate Root" -a sha1 `  
  2.     -eku 1.3.6.1.5.5.7.3.3 -r -sv root.pvk root.cer `  
  3.     -ss Root -sr localMachine  
  4.  
  5. makecert -pe -n "CN=PowerShell User" -ss MY -a sha1 `  
  6.     -eku 1.3.6.1.5.5.7.3.3 -iv root.pvk -ic root.cer  

    MakeCert 將提示您輸入私密金鑰密碼。

若要驗證產生的認證是否正確,請執行以下操作:

    在 PowerShell 提示符下鍵入:

 
  1. get-childitem cert:\CurrentUser\My -codesigning 

    此命令使用 PowerShell 認證提供者來查看該認證的相關資訊。

    如果該認證已建立完成,則輸出將顯示該認證的指紋,其中包含 PowerShell 使用者的驗證資料,如下所示:

目錄: Microsoft.PowerShell.Security\Certificate::CurrentUser\My

        指紋                                      使用者
        ----------                                -------
        4D4917CB140714BA5B81B96E0B18AAF2C4564FDF  CN=PowerShell User ]

對指令碼進行簽名
-------------

如果您具有自我簽署憑證,則可對指令碼進行簽名。如果使用 AllSigned 執行策略,則對指令碼進行簽名允許您在您的電腦上運行該指令碼。

以下樣本指令碼 sign-file.ps1 可對指令碼進行簽名。但如果使用 AllSigned 執行策略,則必須在運行 sign-file.ps1 之前對其進行簽名。

若要使用此指令碼,請將以下文本複製到文字檔中並將該文字檔命名為
sign-file.ps1。

(請確保該指令檔沒有 .txt 副檔名。如果文字編輯器向其追加 .txt,則請將
檔案名稱括在引號中,例如“sign-file.ps1”。)

 
  1. ## sign-file.ps1   
  2. ## 對檔案進行簽名  
  3. param([string] $file=$(throw "請指定檔案名稱。"))   
  4. $cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]  
  5. Set-AuthenticodeSignature $file $cert 

若要對 sign-file.ps1 進行簽名,請在 PowerShell 命令提示字元下鍵入以下命令:

 
  1. $cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]  
  2.  
  3. Set-AuthenticodeSignature sign-file.ps1 $cert  

在對指令碼進行簽名之後,即可在本機電腦上運行該指令碼。但是,如果電腦上的PowerShell 執行策略要求來自可信憑證授權單位的數位簽章,則此指令碼將無法在該電腦上運行。如果您試圖這樣做,則 PowerShell 將報告以下錯誤:

    無法負載檔案 C:\remote_file.ps1。無法驗證該認證的簽名。
 所在行:1 字元:15
        + .\ remote_file.ps1 <<<<    無法負載檔案 C:\remote_file.ps1。無法驗證該認證的簽名。
 所在行:1 字元:15
        + .\ remote_file.ps1 <<<<

如果在運行非您編寫的指令碼時 PowerShell 顯示此訊息,請按照處理任何未簽名指令碼的方式來處理該檔案。檢查代碼,如果代碼可信,則對其進行簽名並運行。

為認證啟用強私密金鑰保護
---------------------------------------------------------

如果您的電腦上具有私人認證,則惡意程式可能會以您的名義對指令碼進行簽名,從而導致授權 PowerShell 運行這些指令碼。

若要防止以您的名義進行的自動簽名,請使用Cert Manager工具 (Certmgr.exe) 將您的簽署憑證匯出到 .pfx 檔案中。Cert Manager包含在Microsoft .NET Framework SDK、Microsoft Platform SDK,以及 Internet Explorer 5.0 及更高版本中。

若要匯出認證,請執行以下操作:

    1. 啟動Cert Manager( GUI 工具)。

    2. 選擇由“PowerShell Local Certificate Root”頒發的認證。

    3. 單擊“匯出”以啟動認證匯出嚮導。

    4. 選中“是,匯出私密金鑰”,然後單擊“下一步”。

    5. 選中“啟用加強保護”。

    6. 鍵入密碼,然後再次鍵入密碼進行確認。

    7. 鍵入副檔名為 .pfx 的檔案名稱。

    8. 單擊“完成”。

若要重新匯入認證,請執行以下操作:

    1. 啟動Cert Manager( GUI 工具)。

    2. 單擊“匯入”以啟動認證匯入嚮導。

    3. 瀏覽到您在匯出過程中建立 .pfx 檔案的位置。

    4. 在“密碼”頁上選中“啟用強私密金鑰保護”,然後輸入匯出過程中所指定的密碼。

    5. 選擇“個人”憑證存放區。

    6. 單擊“完成”。

另請參閱

    有關程式碼簽署的資訊,請在 http://msdn.microsoft.com/ 的 Microsoft Developer Network (MSDN) 參考資料中搜尋“Introduction to Code Signing” (程式碼簽署簡介)。

    有關 Set-AuthenticodeSignature 命令的資訊,請在 PowerShell 命令提示字元下輸入以下命令:

 
  1. help Set-AuthenticodeSignature 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.