Bagikan melalui


about_Signing

Deskripsi singkat

Menjelaskan cara menandatangani skrip sehingga mematuhi kebijakan eksekusi PowerShell.

Deskripsi panjang

Kebijakan eksekusi terbatas tidak mengizinkan skrip apa pun untuk dijalankan. Kebijakan eksekusi AllSigned dan RemoteSigned mencegah PowerShell menjalankan skrip yang tidak memiliki tanda tangan digital.

Topik ini menjelaskan cara menjalankan skrip yang dipilih yang tidak ditandatangani, bahkan saat kebijakan eksekusi RemoteSigned, dan cara menandatangani skrip untuk penggunaan Anda sendiri.

PowerShell memeriksa tanda tangan Authenticode dari jenis jenis berikut:

  • .ps1 file skrip
  • .psm1 file modul
  • .psd1 manifes modul dan file data
  • .ps1xml ketik dan format file XML
  • .cdxml File skrip CDXML
  • .xaml File skrip XAML

Untuk informasi selengkapnya tentang kebijakan eksekusi PowerShell, lihat about_Execution_Policies.

Untuk mengizinkan skrip yang ditandatangani untuk dijalankan

Saat Anda memulai PowerShell di komputer untuk pertama kalinya, kebijakan eksekusi Terbatas , yang merupakan default, kemungkinan akan berlaku.

Kebijakan Terbatas tidak mengizinkan skrip apa pun untuk dijalankan.

Untuk menemukan kebijakan eksekusi yang efektif pada komputer Anda, ketik:

Get-ExecutionPolicy

Untuk menjalankan skrip yang tidak ditandatangani yang Anda tulis di komputer lokal dan skrip yang ditandatangani dari pengguna lain, mulai PowerShell dengan opsi Jalankan sebagai Administrator lalu gunakan perintah berikut untuk mengubah kebijakan eksekusi di komputer menjadi RemoteSigned:

Set-ExecutionPolicy RemoteSigned

Untuk informasi selengkapnya, lihat topik bantuan untuk Set-ExecutionPolicy cmdlet.

Menjalankan skrip yang tidak ditandatangani menggunakan kebijakan eksekusi RemoteSigned

Jika kebijakan eksekusi PowerShell Anda remoteSigned, PowerShell tidak akan menjalankan skrip yang tidak ditandatangani yang diunduh dari internet, termasuk skrip yang tidak ditandatangani yang Anda terima melalui email dan program olahpesan instan.

Jika Anda mencoba menjalankan skrip yang diunduh, PowerShell akan menampilkan pesan kesalahan berikut:

The file <file-name> cannot be loaded. The file <file-name> is not
digitally signed. The script will not execute on the system. Please see
"Get-Help about_Signing" for more details.

Sebelum Anda menjalankan skrip, tinjau kode untuk memastikan bahwa Anda mempercayainya. Skrip memiliki efek yang sama dengan program yang dapat dieksekusi.

Untuk menjalankan skrip yang tidak ditandatangani, gunakan Unblock-File cmdlet atau gunakan prosedur berikut.

  1. Simpan file skrip di komputer Anda.
  2. Klik Mulai, klik Komputer Saya, dan temukan file skrip yang disimpan.
  3. Klik kanan file skrip, lalu klik Properti.
  4. Klik Buka blokir.

Jika skrip yang diunduh dari internet ditandatangani secara digital, tetapi Anda belum memilih untuk mempercayai penerbitnya, PowerShell menampilkan pesan berikut:

Do you want to run software from this untrusted publisher?
The file <file-name> is published by CN=<publisher-name>. This
publisher is not trusted on your system. Only run scripts
from trusted publishers.

[V] Never run  [D] Do not run  [R] Run once  [A] Always run
[?] Help (default is "D"):

Jika Anda mempercayai penerbit, pilih Jalankan sekali atau Selalu jalankan. Jika Anda tidak mempercayai penerbit, pilih Jangan Pernah jalankan atau Jangan jalankan. Jika Anda memilih Jangan Pernah jalankan atau Selalu jalankan, PowerShell tidak akan meminta penerbit ini lagi.

Metode penandatanganan skrip

Anda dapat menandatangani skrip yang Anda tulis dan skrip yang Anda dapatkan dari sumber lain. Sebelum Anda menandatangani skrip apa pun, periksa setiap perintah untuk memverifikasi bahwa skrip aman dijalankan.

Untuk praktik terbaik tentang penandatanganan kode, lihat Praktik Terbaik Penandatanganan Kode.

Untuk informasi selengkapnya tentang cara menandatangani file skrip, lihat Set-AuthenticodeSignature.

New-SelfSignedCertificate Cmdlet, yang diperkenalkan dalam modul PKI di PowerShell 3.0, membuat sertifikat yang ditandatangani sendiri yang sesuai untuk pengujian. Untuk informasi selengkapnya, lihat topik bantuan untuk New-SelfSignedCertificate cmdlet.

Untuk menambahkan tanda tangan digital ke skrip, Anda harus menandatanganinya dengan sertifikat penandatanganan kode. Dua jenis sertifikat cocok untuk menandatangani file skrip:

  • Sertifikat yang dibuat oleh otoritas sertifikasi: Untuk biaya, otoritas sertifikasi publik memverifikasi identitas Anda dan memberi Anda sertifikat penandatanganan kode. Ketika Anda membeli sertifikat dari otoritas sertifikasi terkemuka, Anda dapat berbagi skrip Anda dengan pengguna di komputer lain yang menjalankan Windows karena komputer lain mempercayai otoritas sertifikasi.

  • Sertifikat yang Anda buat: Anda dapat membuat sertifikat yang ditandatangani sendiri di mana komputer Anda adalah otoritas yang membuat sertifikat. Sertifikat ini gratis dan memungkinkan Anda menulis, menandatangani, dan menjalankan skrip di komputer Anda. Namun, skrip yang ditandatangani oleh sertifikat yang ditandatangani sendiri tidak akan berjalan di komputer lain.

Biasanya, Anda akan menggunakan sertifikat yang ditandatangani sendiri hanya untuk menandatangani skrip yang Anda tulis untuk penggunaan Anda sendiri dan untuk menandatangani skrip yang Anda dapatkan dari sumber lain yang telah Anda verifikasi agar aman. Ini tidak sesuai untuk skrip yang akan dibagikan, bahkan dalam perusahaan.

Jika Anda membuat sertifikat yang ditandatangani sendiri, pastikan untuk mengaktifkan perlindungan kunci privat yang kuat pada sertifikat Anda. Ini mencegah program berbahaya menandatangani skrip atas nama Anda. Instruksi disertakan di akhir topik ini.

Membuat sertifikat yang ditandatangani sendiri

Untuk membuat sertifikat yang ditandatangani sendiri, gunakan cmdlet New-SelfSignedCertificate dalam modul PKI. Modul ini diperkenalkan di PowerShell 3.0. Untuk informasi selengkapnya, lihat topik bantuan untuk New-SelfSignedCertificate cmdlet.

$params = @{
    Subject = 'CN=PowerShell Code Signing Cert'
    Type = 'CodeSigning'
    CertStoreLocation = 'Cert:\CurrentUser\My'
    HashAlgorithm = 'sha256'
}
$cert = New-SelfSignedCertificate @params

Menggunakan Makecert.exe

Untuk membuat sertifikat yang ditandatangani sendiri di versi Windows sebelumnya, gunakan alat MakeCert.exePembuatan Sertifikat . Alat ini disertakan dalam Microsoft .NET SDK (versi 1.1 dan yang lebih baru) dan di Microsoft Windows SDK.

Untuk informasi selengkapnya tentang sintaks dan deskripsi MakeCert.exe parameter alat, lihat Alat Pembuatan Sertifikat (MakeCert.exe).

Untuk menggunakan MakeCert.exe alat untuk membuat sertifikat, jalankan perintah berikut di jendela Prompt Perintah SDK.

Catatan

Perintah pertama membuat otoritas sertifikasi lokal untuk komputer Anda. Perintah kedua menghasilkan sertifikat pribadi dari otoritas sertifikasi. Anda dapat menyalin atau mengetik perintah persis seperti yang muncul. Tidak ada penggantian yang diperlukan, meskipun Anda dapat mengubah nama sertifikat.

makecert -n "CN=PowerShell Local Certificate Root" -a sha256 `
-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 sha256 `
-eku 1.3.6.1.5.5.7.3.3 -iv root.pvk -ic root.cer

Alat ini MakeCert.exe meminta kata sandi kunci privat kepada Anda. Kata sandi memastikan bahwa tidak ada yang dapat menggunakan atau mengakses sertifikat tanpa persetujuan Anda. Buat dan masukkan kata sandi yang dapat Anda ingat. Anda akan menggunakan kata sandi ini nanti untuk mengambil sertifikat.

Untuk memverifikasi bahwa sertifikat yang dihasilkan dengan benar, gunakan perintah berikut untuk mendapatkan sertifikat di penyimpanan sertifikat di komputer. Anda tidak akan menemukan file sertifikat di direktori sistem file.

Pada perintah PowerShell, ketik:

Get-ChildItem cert:\CurrentUser\my -codesigning

Perintah ini menggunakan penyedia Sertifikat PowerShell untuk melihat informasi tentang sertifikat.

Jika sertifikat dibuat, output menunjukkan thumbprint yang mengidentifikasi sertifikat dalam tampilan yang menyerupai berikut ini:

Directory: Microsoft.PowerShell.Security\Certificate::CurrentUser\My

Thumbprint                                Subject
----------                                -------
4D4917CB140714BA5B81B96E0B18AAF2C4564FDF  CN=PowerShell User ]

Menandatangani skrip

Setelah membuat sertifikat yang ditandatangani sendiri, Anda dapat menandatangani skrip. Jika Anda menggunakan kebijakan eksekusi AllSigned , menandatangani skrip memungkinkan Anda menjalankan skrip di komputer Anda.

Contoh skrip berikut, Add-Signature.ps1, menandatangani skrip. Namun, jika Anda menggunakan kebijakan eksekusi AllSigned , Anda harus menandatangani Add-Signature.ps1 skrip sebelum menjalankannya.

Penting

Skrip harus disimpan menggunakan pengodean ASCII atau UTF8NoBOM. Anda dapat menandatangani file skrip yang menggunakan pengodean yang berbeda, tetapi skrip gagal dijalankan atau modul yang berisi skrip gagal diimpor. Skrip juga akan gagal jika file berisi karakter Unicode (UTF8).

Untuk menggunakan skrip ini, salin teks berikut ke dalam file teks, dan beri nama Add-Signature.ps1.

## Signs a file
[cmdletbinding()]
param(
    [Parameter(Mandatory=$true)]
    [string] $File
)

$cert = Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert |
    Select-Object -First 1

Set-AuthenticodeSignature -FilePath $File -Certificate $cert

Untuk menandatangani Add-Signature.ps1 file skrip, ketik perintah berikut ini di prompt perintah PowerShell:

$cert = Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert |
    Select-Object -First 1

Set-AuthenticodeSignature add-signature.ps1 $cert

Setelah menandatangani skrip, Anda dapat menjalankannya di komputer lokal. Namun, skrip tidak akan berjalan di komputer tempat kebijakan eksekusi PowerShell memerlukan tanda tangan digital dari otoritas tepercaya. Jika Anda mencoba, PowerShell menampilkan pesan kesalahan berikut:

The file C:\remote_file.ps1 cannot be loaded. The signature of the
certificate cannot be verified.
At line:1 char:15
+ .\ remote_file.ps1 <<<<

Jika PowerShell menampilkan pesan ini saat Anda menjalankan skrip yang tidak Anda tulis, perlakukan file karena Anda akan memperlakukan skrip yang tidak ditandatangani. Tinjau kode untuk menentukan apakah Anda dapat mempercayai skrip.

Mengaktifkan perlindungan yang kuat untuk kunci privat Anda

Jika Anda memiliki kunci privat dan sertifikat di komputer Anda, program berbahaya mungkin dapat menandatangani skrip atas nama Anda, yang mengotorisasi PowerShell untuk menjalankannya.

Untuk mencegah penandatanganan otomatis atas nama Anda, gunakan Pengelola Certmgr.exe Sertifikat untuk mengekspor kunci dan sertifikat penandatanganan Anda ke .pfx file. Pengelola Sertifikat disertakan dalam Microsoft .NET SDK, Microsoft Windows SDK, dan di Internet Explorer.

Untuk mengekspor sertifikat:

  1. Mulai Pengelola Sertifikat.
  2. Pilih sertifikat yang dikeluarkan oleh PowerShell Local Certificate Root.
  3. Klik Ekspor untuk memulai Wizard Ekspor Sertifikat.
  4. Pilih Ya, ekspor kunci privat, lalu klik Berikutnya.
  5. Pilih Aktifkan perlindungan yang kuat.
  6. Ketik kata sandi, lalu ketik lagi untuk mengonfirmasi.
  7. Ketik nama file yang memiliki .pfx ekstensi nama file.
  8. Klik Selesai.

Untuk mengimpor ulang sertifikat:

  1. Mulai Pengelola Sertifikat.
  2. Klik Impor untuk memulai Wizard Impor Sertifikat.
  3. Buka ke lokasi .pfx file yang Anda buat selama proses ekspor.
  4. Pada halaman Kata Sandi, pilih Aktifkan perlindungan kunci privat yang kuat, lalu masukkan kata sandi yang Anda tetapkan selama proses ekspor.
  5. Pilih penyimpanan sertifikat Pribadi.
  6. Klik Selesai.

Mencegah tanda tangan kedaluwarsa

Tanda tangan digital dalam skrip valid sampai sertifikat penandatanganan kedaluwarsa atau selama server tanda waktu dapat memverifikasi bahwa skrip ditandatangani saat sertifikat penandatanganan valid.

Karena sebagian besar sertifikat penandatanganan hanya berlaku selama satu tahun, menggunakan server stempel waktu memastikan bahwa pengguna dapat menggunakan skrip Anda selama bertahun-tahun yang akan datang.

Lihat juga