亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PowerShell > 正文

Powershell 腳本數字簽名實現方法

2020-10-29 20:55:46
字體:
來源:轉載
供稿:網友

腳本很容易被冒名頂替或者更改,因為它們是由純文本構成的。數字簽名為腳本提供了更高的安全性,因為它能確定腳本和腳本的編輯者的唯一性,并且不能被更改。作為腳本的發布者,你能確定你的腳本沒有被惡意篡改。即使專家也無能為力,因為這種機制是基于復雜邏輯的。幸運的是,在實際應用中,你不需要深究這些細節,只需要掌握Powershell腳本簽名的機制和過程。

準備一個合適的證書

因為不能使用傳統的紙質簽名給Powershell腳本進行簽名,你需要另一個工具“證書”。證書就像一把私有并且安全的鑰匙。證書是你的個人電子身份特征。這把私密的鑰匙確保只有證書的擁有者使用證書進行腳本簽名。

可以通過mmc添加管理單元查看證書,但是在Powershell中有專門查看證書的支持??梢酝ㄟ^虛擬驅動器cert:查看本機支持的證書。

創建自簽名證書

創建一個自簽名證書,需要用到microsoft的工具,makecert.exe 。這個工具不能單獨下載,但是它包含在微軟的.NET framework中,如果你的電腦上已經安裝了Visual studio 那就方便多了。

開始->所有程序-Microsoft Visual Studio 2010->Visual Studio Tools->Visual Studio 命令提示(2010)

makecert.exe -pe -r -n "cn=MosserPowerShellTestCert" -eku 1.3.6.1.5.5.7.3.3 -ss "my"Succeeded

這里要稍微注意 -eku 參數:1.3.6.1.5.5.7.3.3,不能是其它,否則證書的預期目的屬性就不是代碼簽名了。
上面創建的證書會自動保存在CurrentUserMy 路徑下面??梢栽赑owershell中查看:

PS E:> ls cert:CurrentUserMy | where {$_.subject -eq "CN=MosserPowerShellTestCert"}  目錄: Microsoft.PowerShell.SecurityCertificate::CurrentUserMyThumbprint                Subject----------                -------BA61AF0B8A856422AD9EF86104C8CEDB2583A21A CN=MosserPowerShellTestCert

驗證代碼簽名證書

查看支持代碼簽名的證書
查看證書的簽發者,代表,序列號,指紋。

## 查看預期目的為代碼簽名的證書:$certs = @(Dir cert:CurrentUserMy -codeSigningCert)"找到 {0} 個代碼簽名證書" -f $certs.count# 找到 1 個代碼簽名證書 ## 選擇 剛才創建的證書$certificate=ls cert:CurrentUserMy | where {$_.subject -eq "CN=MosserPowerShellTestCert"} ## 證書的代表$certificate.subject# CN=MosserPowerShellTestCert ## 證書的簽發者$certificate.issuer# CN=MosserPowerShellTestCert ## 證書的序列號,指紋$certificate | select SerialNumber,Thumbprint | fl *# SerialNumber : C23F35EA85D9A5AB466C07A7C0469A78# Thumbprint  : 586A4332F0528867DA6A0900FCF0938EDD277E22

聲明一個證書受信任

你會發現,在你指定證書的類型,頒發者的名稱等信息后,證書的原始數據(RawData)會自動生成。這樣你不能假冒別人生成一個證書,別人也不能假冒你的名字生成一個證書。如果通過Powershell查看之前生成的證書是否受信任,答案為否。

PS E:> $certificate.Verify()False

為什么我們剛才生成的證書不受信任呢?我們可以通過一個簡單的步驟找到答案。在.NET 中有一個方法:DisplayCertificate()可以通過對話框顯示證書,位于System.Security.dll中。這個dll默認沒有引用,需要添加引用,之后顯示證書對話框。

PS E:> [System.Reflection.Assembly]::LoadWithPartialName("System.Security")GAC  Version    Location---  -------    --------True  v2.0.50727   C:windowsassemblyGAC_MSILSystem.Security2.0.0.0__b03f5f7f11d50a3aSys...[System.Security.Cryptography.x509Certificates.X509Certificate2UI]::DisplayCertificate($certificate)

Powershell 查看證書 不受信任

對話框提示:此CA根證書不受信任,要啟用信任,請將該證書安裝到”受信任的根證書頒發機構“存儲區。

所以接下來可以將該證書復制到受信任的存儲區。可以通過certmgr.msc 手動操作,也可以通過Powershell自動化操作。

PS E:> $rootStore= New-Object system.security.cryptography.X509Certificates.x509Store("root","Currentuser")$rootStore.Open("ReadWrite")$rootStore.Add($certificate)$rootStore.Close()

在執行Add操作時,會有一個確認的對話框,確定即可。

接下來我們查看一下驗證信息。

PS E:> $certificate.Verify()True

給Powershell 腳本簽名

給Powershell腳本進行數字簽名只需要兩步:找的一個受信任的代碼簽名證書,剩下的工作請交給:Set-AuthenticodeSignature吧。

PS E:> 'Write-Host "我的第一個簽名腳本"' > firstSignScript.ps1PS E:> $certificate=ls cert:CurrentUserMy | where {$_.subject -eq "CN=MosserPowerShellTestCert"}PS E:> Set-AuthenticodeSignature .firstSignScript.ps1 $certificate  目錄: E:SignerCertificate            Status Path-----------------            ------ ----586A4332F0528867DA6A0900FCF0938EDD277E22 Valid firstSignScript.ps1PS E:> Get-Content .firstSignScript.ps1Write-Host "我的第一個簽名腳本"# SIG # Begin signature block# MIIEIQYJKoZIhvcNAQcCoIIEEjCCBA4CAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUnxRdr+yE6sFotfvZjfn8k15W# OtigggI0MIICMDCCAZ2gAwIBAgIQwj816oXZpatGbAenwEaaeDAJBgUrDgMCHQUA# MCMxITAfBgNVBAMTGE1vc3NlclBvd2VyU2hlbGxUZXN0Q2VydDAeFw0xMjA2MTYx# MzAyMjZaFw0zOTEyMzEyMzU5NTlaMCMxITAfBgNVBAMTGE1vc3NlclBvd2VyU2hl# bGxUZXN0Q2VydDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAr/2eZ6iS3Zi4# Q2RsXFPRmDynztxPwArZ6SK663R6X2Dfqwv+kuev4VbEHJ20Bvd9yLvCS4QgCCR6# n0D+ELfBy6aRpst51dNKNGV74TZIBu1M5EKG2+didLrKTx3lwEC66Bl+QyFiOzcH# ZhQcaZzgdx8m8EN10/B2cDg9Tm9ppQsCAwEAAaNtMGswEwYDVR0lBAwwCgYIKwYB# BQUHAwMwVAYDVR0BBE0wS4AQjHzaaSg4KlNdyvIpJNjeiqElMCMxITAfBgNVBAMT# GE1vc3NlclBvd2VyU2hlbGxUZXN0Q2VydIIQwj816oXZpatGbAenwEaaeDAJBgUr# DgMCHQUAA4GBAFA3lvWcbA8mWndKdIOCzQUbC9/+1vIeQRGaH7L6U6OHZuV2IBw1# EpLxz1/dyFEMNZmy9z+/YjfJi774UY1eTzOJnz0AYKGPpM0BK2ieGZzPDIlbkpv1# ywrv5BtRt053MNHRYaZQP0v9Sp6pOB4h10tKnvh0DW882zRPeB4hkK+fMYIBVzCC# AVMCAQEwNzAjMSEwHwYDVQQDExhNb3NzZXJQb3dlclNoZWxsVGVzdENlcnQCEMI/# NeqF2aWrRmwHp8BGmngwCQYFKw4DAhoFAKB4MBgGCisGAQQBgjcCAQwxCjAIoAKA# AKECgAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEO# MAwGCisGAQQBgjcCARUwIwYJKoZIhvcNAQkEMRYEFMgyEZ64UFors3z9JGuKLVxh# P2hLMA0GCSqGSIb3DQEBAQUABIGAMHFJHMVlauxKGIo2p9ieFBVp4Am6n533k89j# 7pQXKOGmU/sG9d8PILifHLJZw7BU66+uZFvOSXlUxvqaPRAdeosc2BLDPf5Cu6o7# 61BfSJc2H5dQCgbK/90OKmeJp4KJQRCk7HLEBvV23ddVSyl4CPplbUcTVmo92Zd1# B/Moxro=# SIG # End signature block

遞歸給所有腳本文件簽名

給當前文件下的所有腳本簽名

PS E:> Set-AuthenticodeSignature (ls *.ps1) $certificate  目錄: E:SignerCertificate            Status Path-----------------            ------ ----586A4332F0528867DA6A0900FCF0938EDD277E22 Valid firstSignScript.ps1586A4332F0528867DA6A0900FCF0938EDD277E22 Valid MyScript.ps1586A4332F0528867DA6A0900FCF0938EDD277E22 Valid pipeline.ps1586A4332F0528867DA6A0900FCF0938EDD277E22 Valid PSLib.ps1

如果你喜歡你甚至可以遞歸使用

Set-AuthenticodeSignature (Dir -recurse -include *.ps1) $certificate

使用對話框選擇證書

如果機器上安裝了代碼簽名的證書有許多,你可以通過friendName 或者證書的名稱,證書的指紋,過濾一個證書供腳本簽名。

 Dir cert:CurrentUserMy | where {$_.subject -eq "CN=MosserPowerShellTestCert"}

另一種方法是通過.NET中的內置的對話框進行選擇。將查詢到的證書傳遞給SelectFromCollection()方法,在在作此操作之前必須將證書放在一個特殊的集合中。

# 對話框文本:$title = "可用的證書"$text = "請選擇用于代碼簽名的證書:"# Find certificates:$certificates = Dir cert: -recurse -codeSigningCert# 加載 System.Security 類庫# 將證書存放在特殊的集合(X509Certificate2Collection)中:[Reflection.Assembly]::LoadWithPartialName("System.Security")$collection = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2Collection$certificates | ForEach-Object { $collection.Add($_) }# 顯示選項:$certificate =[System.Security.Cryptography.x509Certificates.X509Certificate2UI]::`SelectFromCollection($collection, $title, $text, 0)# 使用選擇的證書進行數字簽名Set-AuthenticodeSignature -Certificate $certificate[0] -FilePath .firstSignScript.ps1

Powershel l對話框選擇 證書

Powershell腳本簽名驗證

在腳本中簽名到底能帶來什么好處,那就是可以進行驗證??梢允謩域炞C,也可以自動驗證。簽名驗證會告訴你腳本是否信任,或者是否包含了惡意篡改。

用戶自行驗證:手動驗證,可以檢查一個腳本是否包含簽名代碼,簽名者是誰?該簽名者是否受信任。
自動驗證:如果你將Powershell的腳本執行策略設置為AllSigned. Powershell會在你嘗試運行腳本時自動驗證,代碼和腳本簽名是否一致。并且會詢問簽名者是否受信任。

手動驗證

Get-AuthenticodeSignature命令可以驗證簽名。例如創建一個腳本,不進行簽名,通過該命令進行驗證。屬性StatusMessage會告訴你簽名驗證的結果。

 "'未簽名'" >notsign.ps1$checkResult=Get-AuthenticodeSignature .notsign.ps1$checkResult.StatusNotSigned$checkResult.StatusMessage文件 E:notsign.ps1 未經數字簽名。系統將不執行該腳本。有關詳細信息,請參閱 "get-help about_signing"。$checkResult.Status.GetType().fullNameSystem.Management.Automation.SignatureStatus

如果運行該未簽名的腳本,也會收到錯誤提示信息,也就是StatusMessage中包含的信息。腳本的驗證結果狀態包括:

成員名稱 描述
HashMismatch 文件的哈希碼和存儲的簽名不匹配
Incompatible 無法驗證簽名,因為與當前操作系統不兼容
NotSigned 文件沒有簽名
NotSupportedFileFormat 指定的文件格式不支持的系統簽名。這通常意味著系統不知道如何簽名或驗證文件的類型。
NotTrusted 證書的發布者在系統中不受信任.
UnknownError 文件簽名無效
Valid 該文件有一個有效的簽名。這意味著只有簽名的語法上是合法的。這并不意味著信任。

自動驗證

你不須要去驗證腳本的簽名,當你運行一個腳本時,Powershell會自動驗證。即使驗證過的腳本,如果有部分內容更新,自動驗證也會給出警告。
在用戶將腳本執行策略設置為AllSigned和RemoteSigned時,自動驗證就會激活,如果將執行策略設置為AllSigned,所有的腳本都會驗證。如果你選擇RemoteSigned,從網絡上下載的腳本執行會提示需要簽名。

# 設置 ExecutionPolicy 為 AllSigned. 所有# 腳本必須有正確的簽名:Set-ExecutionPolicy AllSigned# 創建一個沒有簽名的腳本.# 該腳本不會執行:無法加載文件 E:unSigned.ps1。文件 E:unSigned.ps1 未經數字簽名。系統將不執行該腳本。有關詳細信息,請參閱 "get-help about_signing"。。所在位置 行:1 字符: 15+ .unSigned.ps1 < <<<  + CategoryInfo     : NotSpecified: (:) [], PSSecurityException  + FullyQualifiedErrorId : RuntimeException即使簽名可以通過驗證,也需要用戶的批準,才能執行。.firstSignScript.ps1是否要運行來自此不可信發布者的軟件?文件 E:firstSignScript.ps1 由 CN=MosserPowerShellTestCert發布,該文件對于您的系統是不可信的。請只運行來自可信發布者的腳本。[V] 從不運行(V) [D] 不運行(D) [R] 運行一次(R) [A] 始終運行(A) [?] 幫助 (默認值為“D”): a我的第一個簽名腳本#第二次執行,不會詢問我的第一個簽名腳本

Windows PowerShell顯示執行的腳本未進行數字簽名。

設置一下可以運行未簽名的腳本或者為你的腳本簽名。

set-executionpolicy Bypass

到這里文章就結束了,需要的朋友可以參考一下。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
www.久久久久| 日韩天堂在线视频| 亚洲美女喷白浆| 亚洲天堂日韩电影| 国产欧美一区二区三区视频| 亚洲sss综合天堂久久| 亚洲国产一区二区三区在线观看| 国产精品日日做人人爱| 欧美野外wwwxxx| 日韩电影免费观看在线观看| 岛国av一区二区| 亚州精品天堂中文字幕| 欧美精品一本久久男人的天堂| 欧美亚洲激情视频| 亚洲三级黄色在线观看| 国产精品久久久久久久久久小说| 亚洲欧美制服丝袜| 色婷婷亚洲mv天堂mv在影片| 欧美乱大交xxxxx| 国产成人aa精品一区在线播放| 日韩电影免费在线观看| 国产成人一区三区| 日韩av在线高清| 久久天天躁狠狠躁老女人| 亚洲成av人乱码色午夜| 高清欧美性猛交xxxx黑人猛交| 欧美极品美女视频网站在线观看免费| 亚洲欧洲视频在线| 日韩精品极品在线观看| 亚洲伊人久久大香线蕉av| 国产精品丝袜白浆摸在线| 亚洲视频电影图片偷拍一区| 亚洲乱码av中文一区二区| 久久久亚洲天堂| 国产精品1区2区在线观看| 国产一区二区三区免费视频| 国产伦精品一区二区三区精品视频| 日韩av综合中文字幕| 欧美黄色片在线观看| 欧美日韩成人免费| 欧美一级高清免费播放| 2019中文字幕在线观看| 97视频com| 777国产偷窥盗摄精品视频| 久久久成人的性感天堂| 在线播放日韩专区| 久久99精品久久久久久青青91| 欧美放荡办公室videos4k| 亚洲japanese制服美女| 国产偷亚洲偷欧美偷精品| 伊人久久免费视频| 国产精品视频xxxx| 国产视频久久久| 国产精品亚洲综合天堂夜夜| 国产精品视频最多的网站| 国产精品美女久久久免费| www.日本久久久久com.| 国内免费久久久久久久久久久| 97在线日本国产| 亚洲精品美女久久久久| 成人精品一区二区三区| 日本韩国在线不卡| 久久人人97超碰精品888| 欧美国产日韩视频| 午夜精品久久久99热福利| 国产视频丨精品|在线观看| 亚洲欧洲午夜一线一品| 九九热视频这里只有精品| 国产精品男女猛烈高潮激情| 久久久久久亚洲精品中文字幕| 日韩精品在线观看视频| 色狠狠久久aa北条麻妃| 2019中文字幕在线免费观看| 精品日本高清在线播放| 日韩视频免费在线观看| 2018日韩中文字幕| 亚洲一区免费网站| 亚洲第一网站男人都懂| 国产精品一区久久久| 国产91成人video| 欧美日韩免费一区| 欧美老少配视频| 九九热r在线视频精品| 精品无人区乱码1区2区3区在线| 国产精品激情av电影在线观看| 欧美激情免费在线| 日本国产一区二区三区| 国产精品精品一区二区三区午夜版| 国产精品7m视频| 欧美性极品少妇精品网站| 成人免费直播live| 日本免费一区二区三区视频观看| 国产欧洲精品视频| 国产亚洲a∨片在线观看| 国产午夜精品全部视频在线播放| 伊人亚洲福利一区二区三区| 97免费视频在线| 欧美视频免费在线| 懂色av一区二区三区| 日韩成人av在线播放| 国产精品尤物福利片在线观看| …久久精品99久久香蕉国产| 久久91亚洲人成电影网站| 久久久999成人| 国产主播喷水一区二区| 亚洲国产日韩欧美在线动漫| 欧美电影免费观看电视剧大全| 韩曰欧美视频免费观看| 色综合亚洲精品激情狠狠| 国产精品久久久久aaaa九色| 日韩欧美黄色动漫| 亚洲一级片在线看| 亚洲视频网站在线观看| 热久久免费视频精品| 国产福利视频一区| 久久久亚洲国产| 欧美裸体男粗大视频在线观看| 精品久久久精品| 国产精品久久久久久久久久久久久| 日韩欧美在线一区| 在线观看中文字幕亚洲| 亚洲网站视频福利| 日韩视频免费看| 亚洲黄一区二区| 欧美成人激情视频| 狠狠色狠狠色综合日日五| 国产精品一区二区三区成人| 午夜精品免费视频| 欧美视频在线观看免费| 国产精品亚洲第一区| 日本电影亚洲天堂| 亚洲欧美成人在线| 欧美视频二区36p| 97视频在线观看网址| 日韩精品亚洲元码| 久久久久久久成人| 日本久久精品视频| 亚洲女同性videos| 日韩欧美国产免费播放| 亚洲91精品在线观看| 国产视频欧美视频| 日韩高清免费在线| 91国内精品久久| 亚洲人成在线一二| 久久香蕉精品香蕉| 国产成人精品在线播放| 国产精品女人网站| 欧美成人午夜影院| 国产日韩欧美一二三区| 欧美刺激性大交免费视频| 欧美精品videos另类日本| 国产精品福利在线| 中文字幕精品视频| 日韩欧美中文字幕在线播放| 色综合五月天导航| 蜜臀久久99精品久久久无需会员| 韩日欧美一区二区| 亚洲综合国产精品| 777777777亚洲妇女| 亚洲在线观看视频网站| 黄色91在线观看| 精品在线欧美视频| 久久免费精品日本久久中文字幕| 国产成人在线一区|