Cara membuat sertifikat yang ditandatangani sendiri di Windows

Sebagian besar administrator Windows yang akrab dengan tema PKI mengetahui utilitasnya Makecert.exe, dengan mana Anda dapat membuat sertifikat yang ditandatangani sendiri. Utilitas ini disertakan dengan Microsoft .NET Framework SDK dan Microsoft Windows SDK. Windows 8 dan Windows Server 2012 memiliki kemampuan bawaan untuk membuat sertifikat yang ditandatangani sendiri menggunakan PowerShell 3.0 dan lebih tinggi tanpa menggunakan utilitas khusus.

Konten:

  • Menggunakan Cmdlet-SelfSignedCertificate Baru untuk Membuat Sertifikat
  • Buat sertifikat Penandatanganan Kode yang ditandatangani sendiri untuk penandatanganan kode

Menggunakan Cmdlet-SelfSignedCertificate Baru untuk Membuat Sertifikat

PowerShell menyarankan menggunakan cmdlet untuk membuat sertifikat yang ditandatangani sendiri Baru-SelfSignedCertificate, bagian dari modul PoSh dengan namanya PKI (Infrastruktur Kunci Publik).

Untuk mendaftar semua cmdlet yang tersedia di modul PKI, jalankan perintah:

Dapatkan-Perintah -Module PKI

Dianjurkan agar Anda menggunakan sertifikat yang ditandatangani sendiri untuk tujuan pengujian atau untuk memberikan sertifikat untuk layanan intranet internal (IIS, Exchange, Proxy Aplikasi Web, LDAPS, ADRMS, DirectAccess, dll.), Dalam kasus ketika, karena alasan tertentu, Anda membeli sertifikat dari penyedia eksternal atau penyebaran infrastruktur PKI / CA tidak mungkin.

Kiat. Jangan lupa juga tentang kemungkinan menggunakan sertifikat SSL gratis lengkap dari Let's Encrypt. Contoh cara menerbitkan sertifikat Mari Enkripsi SSL dan ikat ke situs IIS.

Untuk membuat sertifikat, Anda harus menentukan nilainya -Dnsname (Nama server DNS, nama mungkin arbitrer dan berbeda dari nama host lokal) dan -CertStoreLocation (bagian dari toko sertifikat lokal tempat sertifikat yang dihasilkan akan ditempatkan). Anda dapat menggunakan cmdlet untuk membuat sertifikat yang ditandatangani sendiri di Windows 10 (dalam contoh kami), Windows 8 / 8.1, dan Windows Server 2016/2012/2012 R2.

Untuk membuat sertifikat untuk test.contoso.com nama DNS dan menempatkannya di daftar sertifikat komputer pribadi, jalankan perintah:

New-SelfSignedCertificate -DnsName test.contoso.com -CertStoreLocation cert: \ LocalMachine \ My

Direktori: Microsoft.PowerShell.Security \ Certificate :: LocalMachine \ My
Subjek sidik jari
----------                               -------
2779C0490D558B31AAA0CEF2F6EB1A5C2CA83B30 CN = test.contoso.com

Secara default, sertifikat yang ditandatangani sendiri dibuat dengan pengaturan berikut:

  • Algoritma kriptografi: RSA;
  • Ukuran kunci: 2048 sedikit;
  • Opsi penggunaan kunci yang valid:  Otentikasi Klien dan Otentikasi server;
  • Sertifikat dapat digunakan untuk: Tanda tangan digital, Enkripsi kunci ;
  • Sertifikat validitas: 1 tahun.

Perintah ini akan membuat sertifikat baru dan mengimpornya ke penyimpanan komputer pribadi. Membuka snap certlm.msc, periksa di bagian Pribadi sertifikat komputer menyimpan sertifikat baru muncul.

Seperti yang Anda lihat, properti sertifikat menunjukkan bahwa sertifikat ini dapat digunakan untuk otentikasi klien (Otentikasi Klien), tetapi valid untuk otentikasi server (Otentikasi Server).

Catatan. Masa berlaku sertifikat yang ditandatangani sendiri itu terbatas pada 1 tahun sejak tanggal pembuatannya. Untuk menerbitkan sertifikat selama 3 tahun, jalankan perintah berikut:

$ todaydate = Dapatkan-Tanggal
$ add3year = $ todaydate.AddYears (3)
New-SelfSignedCertificate -dnsname test.contoso.com -tidak setelah $ add3year -CertStoreLocation cert: \ LocalMachine \ My

Untuk mengekspor sertifikat yang diterima dengan kunci pribadi ke file pfx yang dilindungi kata sandi, kita memerlukan Thumbprint-nya, yang harus disalin dari hasil perintah New-SelfSignedCertificate:

$ CertPassword = ConvertTo-SecureString -String “YourPassword” -Force -AsPlainText

Ekspor-PfxCertificate -Cert cert: \ LocalMachine \ My \ 2779C0490D558B31AAA0CEF2F6EB1A5C2CA83B30 -FilePath C: \ test.pfx -Password $ CertPassword

Anda dapat mengekspor kunci publik sertifikat:

Ekspor-Sertifikat -Sertifikat Cert: \ LocalMachine \ My \ 2779C0490D558B31AAA0CEF2F6EB1A5C2CA83B30 -FilePath C: \ testcert.cer

Kunci publik yang dihasilkan atau file sertifikat itu sendiri dapat diinstal pada server web atau klien domain menggunakan GPO (contoh menginstal sertifikat pada PC menggunakan kebijakan grup).

Salah satu fitur berguna dari cmdlet New-SelfSignedCertificate adalah kemampuan untuk membuat sertifikat dengan beberapa nama berbeda. Subjek Alternatif Nama (SAN).

Catatan. Jika sertifikat dengan banyak nama dibuat, nama depan dalam parameter DnsName akan digunakan sebagai sertifikat CN (Nama Umum).

Misalnya, buat sertifikat dengan nama berikut:

  • Nama Subjek (CN): adfs1.contoso.com
  • Nama Alternatif Subjek (DNS): web_gw.contoso.com
  • Nama Alternatif Subjek (DNS): enterprise_reg.contoso.com

Perintah untuk membuat sertifikat adalah sebagai berikut:

New-SelfSignedCertificate -DnsName adfs1.contoso.com, web_gw.contoso.com, enterprise_reg.contoso.com -CertStoreLokasi sertifikat: \ LocalMachine \ My

Anda juga dapat mengeluarkan sertifikat untuk seluruh namespace di domain, untuk ini, tentukan nama server sebagai * .contoso.com.

New-SelfSignedCertificate -certstorelocation cert: \ localmachine \ my -dnsname * .contoso.com

Buat sertifikat Penandatanganan Kode yang ditandatangani sendiri untuk penandatanganan kode

Di PoweShell 3.0, cmdlet New-SelfSifgnedCertificate hanya menghasilkan sertifikat SSL yang tidak dapat digunakan untuk menandatangani driver dan kode aplikasi (sebagai lawan dari sertifikat yang dihasilkan oleh MakeCert).

Di PowerShell 5, versi baru cmdlet New-SelfSifgnedCertificate sekarang dapat digunakan untuk mengeluarkan sertifikat tipe Penandatanganan Kode..

Untuk membuat sertifikat yang ditandatangani sendiri untuk menandatangani kode aplikasi, jalankan perintah:

$ cert = Baru-SelfSignedCertificate -Subject "Cert for Code Signing" -Type CodeSigningCert -CertStoreLocation cert: \ LocalMachine \ My

Mari kita coba menandatangani skrip PowerShell menggunakan sertifikat ini:

Set-AuthenticodeSignature -FilePath C: \ PS \ test_script.ps1 -Sertifikat $ cert

Jika peringatan UnknownError muncul selama pelaksanaan perintah, maka sertifikat ini tidak dipercaya, karena ada di toko pribadi sertifikat pengguna.

Anda harus memindahkannya ke sertifikat root (jangan lupa untuk memeriksa secara berkala sertifikat Windows yang tidak dipercaya toko dan memperbarui daftar sertifikat root):

Move-Item -Path $ cert.PSPath -Destination "Cert: \ CurrentUser \ Root"

Setelah itu, Anda dapat menandatangani skrip PowerShell menggunakan sertifikat yang ditandatangani sendiri ini.