Panduan praktis penyimpanan sertifikat Windows — masukkan ke pengguna atau ke komputer?

· Diperbarui pada: · · Sertifikat, Windows, Keamanan, PKI, TLS, PowerShell, Aplikasi bisnis, Sistem informasi

Riwayat revisi (3 pembaruan, terakhir pada 1 Sep 2026)

Catatan perubahan yang dilakukan pada artikel ini. Jika versi sebelumnya telah diarsipkan, versi itu tetap dapat dibaca melalui tautan permanen dengan DOI.

Perbaikan tinjauan Codex: delimiter tabel berlebih pada baris pengajuan elektronik dihapus.
Diterjemahkan ulang sebagai terjemahan lengkap dari naskah Jepang. Versi bahasa Indonesia sebelumnya adalah ringkasan yang hanya memindahkan sebagian naskah, sehingga bagian, tabel, gambar Mermaid, keterangan gambar, dan FAQ tidak ada. Semuanya dipulihkan sesuai naskah Jepang, dan klaim teknisnya sama dengan versi Jepang.
Relasi dalam peta pengetahuan artikel ini ditinjau ulang. Relasi yang klaimnya lebih luas daripada teks (relasi yang hanya berlaku bersyarat, relasi yang setara dengan «mengurangi» bukan «mencegah», relasi yang merupakan rekomendasi bukan prasyarat) diubah menjadi bersyarat atau predikatnya diganti agar lebih akurat. Klaim dalam teks tidak diubah.
Publikasi pertama
Mengutip artikel ini(DOI (arsip terdaftar): 10.5281/zenodo.22175575)

DOI di bawah mengarah ke versi yang telah diarsipkan sebelumnya dan mungkin berbeda dari teks saat ini. Gunakan URL halaman ini untuk merujuk teks saat ini.

Go Komura (2026). Panduan praktis penyimpanan sertifikat Windows — masukkan ke pengguna atau ke komputer?. KomuraSoft LLC. https://comcomponent.com/id/blog/windows-certificate-store-guide/

DOI (arsip terdaftar)
10.5281/zenodo.22175575
DOI (versi terakhir yang didaftarkan)
10.5281/zenodo.22175576

“Setelah perangkat konfirmasi kualifikasi daring diganti, sertifikat klien dipasang ulang ke PC baru, lalu koneksi gagal.” “Di mesin pengembangan API bank tersambung, tetapi setelah dijadikan layanan Windows muncul ‘sertifikat tidak ditemukan’.” “Sertifikat yang terlihat di certmgr.msc dan yang terlihat di certlm.msc — mana yang asli, tidak jelas.” Konsultasi semacam ini rutin datang ketika kami mengerjakan integrasi Web API bersertifikat klien sebagai proyek kustom.

Konfirmasi kualifikasi daring di fasilitas medis, pengajuan elektronik, API perbankan, EDI dengan mitra. Sertifikat klien yang dulu hanya disentuh staf infrastruktur perusahaan besar, kini ditangani staf TI usaha kecil-menengah dan pengembang aplikasi bisnis. Insiden seputar sertifikat pun sebenarnya mengerucut ke beberapa pola. Salah tempat memasang, lupa izin kunci privat, lupa masa berlaku — tiga itu.

Artikel ini ditujukan kepada pengembang aplikasi bisnis yang memakai sertifikat klien, dan kepada staf TI yang diminta mengganti sertifikat. Porosnya adalah keputusan “masukkan ke penyimpanan pengguna atau penyimpanan komputer?” Dari situ artikel merangkai sekaligus struktur penyimpanan sertifikat Windows, pemberian izin kunci privat, inventaris masa berlaku dengan PowerShell, sampai kode pemakaian dari .NET. Isi merujuk informasi primer Microsoft Learn per Agustus 2026.

1. Kesimpulan dulu

  • Penyimpanan sertifikat Windows ada dua jalur: pengguna (CurrentUser) dan komputer (LocalMachine). Penyimpanan pengguna berbeda per akun (di bawah registri HKEY_CURRENT_USER). Penyimpanan komputer bersama untuk seluruh PC (di bawah HKEY_LOCAL_MACHINE).12
  • Alat pengelolanya juga dua. certmgr.msc membuka store pengguna saat ini; certlm.msc membuka store komputer lokal. Dari PowerShell: Cert:\CurrentUser dan Cert:\LocalMachine.34
  • Masukkan ke mana ditentukan oleh akun yang menjalankan program pemakai sertifikat itu. Aplikasi pengguna interaktif: penyimpanan pengguna. Eksekusi tanpa pengawasan di layanan Windows, IIS, atau Penjadwal Tugas: penyimpanan komputer, sebagai prinsip (tabel keputusan di bab 3).
  • Penyebab “di pengembangan jalan, setelah dijadikan layanan tidak ditemukan” hampir selalu satu. Sertifikat yang pengembang pasang di penyimpanan penggunanya sendiri tidak terlihat dari CurrentUser layanan yang berjalan dengan akun lain (bab 3).
  • Sertifikat dan kunci privat adalah dua hal berbeda. Hanya memasang ke penyimpanan komputer biasanya tidak membuat akun layanan dapat membaca kunci privat. Beri izin baca kepada akun eksekusi lewat Kelola kunci privat di certlm.msc.5
  • Saat impor pfx, kunci privat secara default tidak dapat diekspor. Import-PfxCertificate mengambil kunci privat dalam bentuk tidak dapat diekspor ulang kecuali -Exportable ditetapkan. Ini bukan insiden, melainkan default yang memang diinginkan.6
  • Kedaluwarsa dicegah dengan otomatisasi inventaris. Sertifikat yang kedaluwarsa dalam jumlah hari yang ditetapkan dapat diekstrak secara mekanis, misalnya Get-ChildItem Cert:\LocalMachine\My -ExpiringInDays 60.4
  • Jika sidik jari (thumbprint) di-hardcode di kode atau konfigurasi, setiap pembaruan sertifikat akan membuatnya gagal. Sidik jari sertifikat baru pasti berubah. Mengeluarkannya ke konfigurasi plus periode paralel lama-baru adalah dasar desain (bab 5 dan 7).

Pada diagram, garis utuh menunjukkan relasi yang selalu berlaku dan garis putus-putus menunjukkan relasi bersyarat (syaratnya ada pada penjelasan masing-masing relasi di halaman rincian). Daftar lengkap relasi (total 41, beserta bukti dan tingkat kepastian) serta definisi konsep utama dikumpulkan di halaman rincian peta pengetahuan (dalam bahasa Jepang). Data: JSON-LD / Turtle

2. Gambaran penyimpanan sertifikat — dua lokasi dan store logis

2.1. Dua jalur: pengguna dan komputer

Penyimpanan sertifikat Windows terbagi besar ke dua “lokasi”.1

  • Penyimpanan sertifikat komputer (komputer lokal, LocalMachine): satu per PC, bersama untuk semua pengguna dan layanan di PC itu. Wujudnya di bawah registri HKEY_LOCAL_MACHINE\Software\Microsoft\SystemCertificates.2
  • Penyimpanan sertifikat pengguna (pengguna saat ini, CurrentUser): berbeda per akun pengguna. Wujudnya di bawah HKEY_CURRENT_USER\Software\Microsoft\SystemCertificates, yaitu bagian dari profil pengguna.2

Selain itu ada juga store per akun layanan3, wujudnya kunci registri per nama layanan.2 Yang perlu dipegang dulu di praktik adalah dua yang pertama.

Ada satu spesifikasi penting. Setiap store logis di penyimpanan pengguna, kecuali Pribadi, mewarisi isi store bernama sama di penyimpanan komputer dan menampilkannya.1 Misalnya, jika sertifikat CA internal dipasang ke Otoritas Sertifikasi Akar Tepercaya di penyimpanan komputer, sertifikat itu juga muncul di Otoritas Sertifikasi Akar Tepercaya setiap pengguna. Sebaliknya, hanya store Pribadi yang tidak diwariskan, jadi sertifikat klien (yang memang dipasang ke store Pribadi) mengharuskan Anda sendiri memutuskan “siapa yang perlu melihatnya”. Asimetri inilah inti artikel ini.

Pengguna (CurrentUser)berbeda per akunKomputer (LocalMachine)satu per PC · bersama semua pengguna dan layananisi diwariskan lalu terlihatdiwariskandiwariskanPribadi (My)※ tidak diwariskan = Anda sendiri yang menentukan tempat memasangOtoritas Sertifikasi Akar Tepercaya (Root)Otoritas Sertifikasi Perantara (CA)Penerbit Tepercaya (TrustedPublisher)Pribadi (My)Otoritas Sertifikasi Akar Tepercaya (Root)Otoritas Sertifikasi Perantara (CA)Penerbit Tepercaya (TrustedPublisher)

2.2. Store logis utama

Di dalam tiap lokasi, store terbagi menurut peran. Folder yang terlihat di certmgr.msc / certlm.msc adalah itu; dari PowerShell atau perintah, nama internal bahasa Inggris yang dipakai.24

Nama tampilan Nama internal Tempat untuk apa
Pribadi My Sertifikat yang dipakai sendiri (PC ini / pengguna ini). Sertifikat klien dan sertifikat server ada di sini. Yang terhubung dengan kunci privat juga di sini
Otoritas Sertifikasi Akar Tepercaya Root Sertifikat CA akar yang menjadi titik kepercayaan. CA di bawah yang dipasang di sini “dipercaya”
Otoritas Sertifikasi Perantara CA Sertifikat CA perantara yang menghubungkan akar dan ujung. Bahan penyusunan rantai
Penerbit Tepercaya TrustedPublisher Sertifikat yang dipercaya sebagai penerbit perangkat lunak bertanda tangan (bab 8)

2.3. Tiga jendela — certmgr.msc / certlm.msc / drive Cert:

Ada tiga cara melihat store yang sama.34

  • certmgr.msc: konsol pengelolaan yang membuka store pengguna saat ini.
  • certlm.msc: konsol pengelolaan yang membuka store komputer lokal.
  • Drive Cert: di PowerShell: store dapat dioperasikan seperti sistem berkas dalam hierarki Cert:\CurrentUser\... dan Cert:\LocalMachine\.... Sertifikat diidentifikasi dengan sidik jari.

Jika snap-in sertifikat ditambahkan secara manual ke mmc.exe, sasarannya dipilih dari tiga jenis: akun pengguna, akun komputer, akun layanan. Pengguna yang bukan administrator hanya dapat mengelola store akun penggunanya sendiri.3

Langkah pertama investigasi gangguan adalah menyamakan “store mana yang dilihat aplikasi” dengan “store mana yang Anda lihat”. Mengamati certmgr.msc sambil menelusuri gangguan layanan tidak akan pernah menjawab, karena yang dilihat berbeda.

3. Masukkan ke mana — tabel keputusan menurut bentuk eksekusi program

Kriterianya satu. Program pemakai sertifikat itu berjalan dengan akun siapa.

Bentuk eksekusi Akun eksekusi Store tujuan Catatan
Aplikasi desktop yang diluncurkan pengguna interaktif Pengguna yang sedang logon Pengguna (Cert:\CurrentUser\My) Perlu dipasang per akun pemakai. Jika PC bersama dipakai beberapa orang, pertimbangkan juga penyimpanan komputer
Layanan Windows LocalSystem / NETWORK SERVICE / akun layanan khusus Komputer (Cert:\LocalMachine\My) Selain LocalSystem (NETWORK SERVICE, akun khusus, dll.) pemberian izin baca kunci privat wajib (bab 4). LocalSystem dapat membaca dengan izin SYSTEM default
Aplikasi web di IIS Identitas kumpulan aplikasi Komputer Sama seperti di atas
Eksekusi tanpa pengawasan Penjadwal Tugas (jalan terlepas dari logon pengguna) Akun yang ditetapkan pada tugas Komputer disarankan Bisa juga jalan dari penyimpanan pengguna akun eksekusi, tetapi hanya menambah verifikasi profil dan visibilitas store, tanpa banyak keuntungan
Pengajuan elektronik / autentikasi web di peramban Pengguna yang sedang logon Pengguna Masuk akal juga karena tidak untuk dipakai orang selain penerima distribusi

Jika ragu: yang berjalan tanpa pengawasan ke penyimpanan komputer, yang dioperasikan orang ke penyimpanan pengguna.

3.1. Anatomi insiden klasik — “di pengembangan jalan, setelah dijadikan layanan tidak ditemukan”

Insiden ini dapat direproduksi persis dengan langkah berikut.

  1. Pengembang mengimpor pfx dengan mengklik ganda di PC-nya. Default wizard adalah “pengguna saat ini”, jadi sertifikat masuk ke penyimpanan pengguna akun pengembang.
  2. Aplikasi saat pengembangan dijalankan dari Visual Studio, yaitu dengan akun pengembang, jadi membuka StoreLocation.CurrentUser menemukan sertifikat. Jalan.
  3. Di server produksi didaftarkan sebagai layanan Windows. Layanan berjalan sebagai NETWORK SERVICE atau akun khusus.
  4. CurrentUser yang dibuka kode layanan adalah penyimpanan pengguna akun eksekusi layanan. Itu kosong. “Sertifikat tidak ditemukan.”
Server produksiMesin pengembanganprogram yang sama dipasangCurrentUser yang dibuka kode adalahpenyimpanan pengguna akun layananDidaftarkan sebagai layanan Windowsakun eksekusi: NETWORK SERVICE, dll.Itu kosong→ 'sertifikat tidak ditemukan'Masuk ke penyimpanan penggunaakun pengembangImpor pfx dengan klik gandadefault wizard: pengguna saat iniDijalankan dari Visual Studio= berjalan dengan akun pengembangMembuka CurrentUser: ketemu→ jalan

Intinya: penyimpanan pengguna “ada sebanyak jumlah akun”. Meski administrator membuka certmgr.msc dan mengonfirmasi “sudah terpasang, kan?”, itu store administrator sendiri, bukan store akun layanan. Penanganannya bukan salinan dadakan, melainkan memasang ulang ke penyimpanan komputer, dan menyamakan kode ke StoreLocation.LocalMachine. Pemberian izin di bab berikutnya termasuk satu paket.

4. Kunci privat dan hak akses — insiden klasik kedua

4.1. Sertifikat dan kunci privat adalah dua hal berbeda

Yang terlihat di daftar penyimpanan sertifikat adalah sertifikat (informasi publik), bukan kunci privat itu sendiri. Yang benar-benar diperlukan untuk autentikasi klien adalah pemrosesan tanda tangan dengan kunci privat, jadi “terlihat di daftar” dan “dapat dipakai” adalah masalah berbeda. Jika keduanya dicampur, gangguan yang tampilannya sulit dipahami muncul: “sertifikat ada tetapi handshake TLS gagal”, “error internal jenis Access Denied”.

4.2. Praktik impor pfx — dapat diekspor atau tidak adalah keputusan

Pasangan sertifikat dan kunci privat diserahterimakan sebagai berkas pfx (PKCS #12), dan dapat diambil ke store dengan Import-PfxCertificate.6

$pwd = Get-Credential -UserName '(masukkan kata sandi di bawah)' -Message 'Kata sandi PFX'
Import-PfxCertificate -FilePath C:\certs\client.pfx `
    -CertStoreLocation Cert:\LocalMachine\My -Password $pwd.Password

Yang penting di sini: kecuali -Exportable ditambahkan, kunci privat yang diambil tidak dapat diekspor ulang — itu perilaku default.6 Memasang semuanya sebagai dapat diekspor “agar nanti bisa dimigrasikan” adalah menambah satu jalur pengeluaran kunci privat. Operasikan dengan menyimpan pfx asli secara aman, dan kunci privat di store pada dasarnya tidak dapat diekspor — itu rekomendasi kami. Catatan: justru pfx asli dan kata sandinya yang sering dibiarkan teks biasa. Cara berpikirnya dirangkum di “Penyimpanan rahasia aplikasi Windows — menghindari pengaturan teks biasa dengan DPAPI” dan “Penanganan kredensial yang aman di PowerShell”.

4.3. Pemberian izin kunci privat kepada akun layanan

Kunci privat sertifikat yang dipasang di penyimpanan komputer biasanya secara default tidak dapat dibaca selain oleh administrator dan SYSTEM. Karena itu, layanan yang berjalan sebagai LocalSystem dapat membaca kunci privat dengan default, tetapi jika dijalankan dengan akun selain itu — NETWORK SERVICE, akun layanan khusus, identitas kumpulan aplikasi IIS — beri izin baca secara eksplisit kepada akun eksekusi. Langkahnya dapat dilakukan dari UI snap-in sertifikat.5

  1. Buka certlm.msc (atau snap-in sertifikat yang sasarannya akun komputer).
  2. Di Pribadi → Sertifikat, klik kanan sertifikat sasaran, lalu dari Semua tugas buka Kelola kunci privat.
  3. Di tab Keamanan, tambahkan akun eksekusi (NETWORK SERVICE, akun layanan khusus, identitas kumpulan aplikasi IIS, dan semacamnya) dan izinkan Baca.5

Full Control tidak perlu. Jika hanya untuk tanda tangan, baca sudah cukup. Sebaliknya, memberi Full Control kepada Everyone karena tidak jalan adalah menurunkan kunci privat ke perlakuan setara kata sandi teks biasa, jadi mutlak dihindari. Penempatan ke penyimpanan komputer dan pemberian izin kunci privat selalu satu paket — cukup menuliskan ini di prosedur, insiden jenis ini hilang.

5. Mencegah insiden kedaluwarsa — inventaris, penggantian, buku besar

5.1. Inventaris dengan PowerShell

Masa berlaku sertifikat ada di properti NotAfter. Inventaris mekanis dapat dilakukan dengan Get-ChildItem terhadap drive Cert:.4

# Daftar store Pribadi di penyimpanan komputer, diurutkan menurut masa berlaku
Get-ChildItem Cert:\LocalMachine\My |
    Sort-Object NotAfter |
    Format-Table Thumbprint, Subject, NotAfter

# Hanya yang kedaluwarsa dalam 60 hari (0 mengeluarkan yang sudah kedaluwarsa)
Get-ChildItem -Path Cert:\LocalMachine\My -ExpiringInDays 60

-ExpiringInDays adalah parameter yang mengembalikan “sertifikat yang kedaluwarsa dalam jumlah hari yang ditetapkan”; 0 mengeluarkan sertifikat yang sudah kedaluwarsa.4 Jadikan ini tugas terjadwal bulanan yang mengelilingi semua server, lalu kumpulkan hasil ke email atau buku besar — hanya itu, insiden jenis “kedaluwarsa, dari Senin pagi konfirmasi kualifikasi tidak lolos” hampir dapat dicegah.

5.2. Langkah penggantian — periode paralel lama-baru dan jebakan sidik jari

Pembaruan sertifikat bukan “hapus lalu pasang”, melainkan “tambahkan dulu, lalu alihkan, konfirmasi, baru hapus”.

  1. Impor sertifikat baru (pfx) ke store yang sama. Sidik jarinya berbeda, jadi yang lama dan yang baru dapat hidup bersama di store yang sama.
  2. Beri izin kunci privat sertifikat baru (bab 4). Yang mudah dilupakan saat pembaruan adalah ini. Izin menempel per kunci privat sertifikat, jadi setelah sertifikat diganti, pemberian diulang.
  3. Pemberitahuan ke sistem mitra (jika API memerlukan pendaftaran sertifikat sebelumnya) diselesaikan lebih dulu sambil terus beroperasi dengan sertifikat lama, dan pastikan periode paralel yang menerima baik yang lama maupun yang baru. Jika peralihan didahulukan, pihak mitra menolak sertifikat baru dan komunikasi produksi berhenti.
  4. Alihkan konfigurasi aplikasi ke sertifikat baru, lalu konfirmasi operasi.
  5. Setelah periode yang cukup, hapus sertifikat lama.
1. Impor pfx baru ke store yang sama(lama dan baru hidup bersama)2. Beri izin kunci privatsertifikat baru3. Daftarkan sebelumnya ke mitra(lanjutkan operasi dengan sertifikat lama)4. Tulis ulang sidik jari di konfigurasi,alihkan, konfirmasi operasi5. Setelah periode paralel,hapus sertifikat lama

Jebakan terbesar saat ini adalah sidik jari yang tertulis di berkas konfigurasi atau kode. Sidik jari unik per sertifikat, jadi pasti berubah jika diperbarui. Jika satu tempat pun masih merujuk sidik jari lama, “sertifikat sudah diperbarui tetapi tidak bisa tersambung” terjadi. Yang pasti adalah mengelola di buku besar di mana sidik jari tertulis (konfigurasi aplikasi, pengikatan IIS, skrip, pemberitahuan ke mitra).

5.3. Anjuran buku besar sertifikat

Buku besar pun, pertama-tama satu lembar Excel sudah cukup. Minimal, buat kolom kegunaan / penerbit / subjek / sidik jari / tempat terpasang (nama server + store) / akun yang punya izin kunci privat / masa berlaku / tautan ke prosedur pembaruan / penanggung jawab, lalu cocokkan dengan hasil inventaris 5.1. Kenyataan insiden sertifikat bukan masalah teknis melainkan masalah “tidak seorang pun punya daftar”, jadi buku besar paling manjur.

6. Membaca verifikasi dan kegagalan — rantai dan distribusi akar

6.1. Dasar verifikasi rantai dan certutil

Error jenis “sertifikat ini tidak dipercaya” adalah keadaan rantai (jalur sertifikasi) dari sertifikat ujung sampai CA akar terputus di suatu tempat. Untuk mengisolasi masalah, certutil berguna.7

tidak dapat diperoleh(tidak dari penyajian, AIA, maupun store)tidak didistribusikankedaluwarsaSertifikat ujung(sertifikat klien · sertifikat server)Sertifikat CA perantaratempat: store Otoritas Sertifikasi Perantara (CA)Sertifikat CA akartempat: Otoritas Sertifikasi Akar Tepercaya (Root)rantai tidak dapat disusun(penyebab klasik 1)error 'tidak dipercaya'(penyebab klasik 2)error masa berlaku(penyebab klasik 3)
:: Bangun dan verifikasi rantai berkas sertifikat (sekaligus ambil URL pemeriksaan pencabutan)
certutil -urlfetch -verify client.cer

:: Jika aplikasi sasaran memakai penyimpanan pengguna, tambahkan -user agar konteks verifikasi sama
certutil -user -urlfetch -verify client.cer

:: Dump isi store (tambahkan -user untuk penyimpanan pengguna)
certutil -store My
certutil -user -store My

certutil -verify memverifikasi sertifikat, CRL, dan rantai; jika CACertFile tidak ditetapkan, ia menyusun rantai lengkap lalu memverifikasi.7 Keluarannya panjang, tetapi dapat dibaca di lapisan mana kepercayaan terputus, dan apakah informasi pencabutan diperoleh. Penyebab khas ada tiga: (1) sertifikat CA perantara tidak dapat diperoleh (mitra TLS tidak mengirimkannya, tidak dapat diambil dari informasi AIA sertifikat, dan tidak ada di store Otoritas Sertifikasi Perantara), (2) akar CA internal tidak didistribusikan ke Otoritas Sertifikasi Akar Tepercaya, (3) sertifikat itu sendiri kedaluwarsa. CA perantara juga dapat terselesaikan lewat penyajian dari mitra atau pengambilan otomatis via AIA, jadi penempatan ke store dipandang sebagai “salah satu cara memastikan”.

6.2. Distribusi akar CA internal dan self-signed dengan GPO/Intune

Jika memakai CA internal atau sertifikat self-signed untuk validasi, sertifikat akar itu perlu didistribusikan ke tiap PC. Bukan memasang manual satu per satu, melainkan menaikkan ke mekanisme distribusi.

  • Lingkungan Active Directory (GPO): mengimpor sertifikat ke Otoritas Sertifikasi Akar Tepercaya di Konfigurasi Komputer\Kebijakan\Pengaturan Windows\Pengaturan Keamanan\Kebijakan Kunci Publik Kebijakan Grup akan mendistribusikannya ke PC sasaran.8
  • Lingkungan yang dikelola Intune: distribusikan sertifikat CA akar/perantara dengan profil Sertifikat tepercaya. Di Windows, store tujuan distribusi (akar/perantara komputer, perantara pengguna) dapat dipilih.9

Seperti dinyatakan di 2.1, jika dipasang ke akar penyimpanan komputer, dipercaya dari semua pengguna.1 Karena itu, risiko sebaliknya juga harus dilihat langsung. Operasi memasang sertifikat self-signed ke Otoritas Sertifikasi Akar Tepercaya adalah menanam titik kepercayaan baru di PC itu. Jika kunci privatnya bocor, itu menjadi pijakan untuk menerbitkan sertifikat yang menyamar sebagai situs atau perangkat lunak mana pun. Jika dijadikan operasi permanen, yang masuk akal adalah mendirikan CA internal yang melindungi kunci privat dengan tepat, atau mendekat ke sertifikat CA publik; akar self-signed prinsipnya “hanya lingkungan validasi, dengan batas waktu”.

7. Sudut pandang pengembang — memakai store dengan benar dari .NET

7.1. Mencari sidik jari dengan X509Store

Dari .NET, buka store dengan X509Store dan ambil sertifikat dengan Find.1011

using System.Security.Cryptography.X509Certificates;

static X509Certificate2 GetClientCertificate(string thumbprint)
{
    using var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
    store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);

    var found = store.Certificates.Find(
        X509FindType.FindByThumbprint, thumbprint, validOnly: true);

    if (found.Count == 0)
        throw new InvalidOperationException(
            $"Sertifikat tidak ditemukan: sidik jari={thumbprint}, " +
            $"lokasi={store.Location}\\{store.Name}");

    var cert = found[0];
    if (!cert.HasPrivateKey)
        throw new InvalidOperationException(
            $"Sertifikat ada, tetapi kunci privat tidak terhubung (misalnya impor " +
            $"dari .cer): sidik jari={thumbprint}, lokasi={store.Location}\\{store.Name}");

    return cert;
}

Keputusan bab 3 langsung tersambung ke sini. Kode yang berjalan sebagai layanan: StoreLocation.LocalMachine. Aplikasi interaktif: StoreLocation.CurrentUser. Satu lagi, perhatikan argumen ketiga Find, validOnly. true mengembalikan hanya sertifikat sah yang lolos verifikasi.11 Itu asuransi agar tidak memegang sertifikat kedaluwarsa, tetapi sertifikat self-signed uji yang rantainya tidak dipercaya juga jatuh ke sisi “tidak ditemukan”, jadi saat “sudah terpasang tetapi tidak ditemukan” curigai juga di sini. Selain itu, pesan error saat tidak ditemukan, seperti contoh di atas, selalu sertakan store mana yang dicari. Waktu investigasi insiden bab 3 berubah drastis.

7.2. Memuat sertifikat klien ke HttpClient

Sertifikat yang diambil ditambahkan ke HttpClientHandler.ClientCertificates dan disajikan ke server. Koleksi ini adalah himpunan sertifikat yang disajikan ke server pada autentikasi klien berbasis sertifikat.12

var handler = new HttpClientHandler();
handler.ClientCertificates.Add(GetClientCertificate(thumbprint));

var client = new HttpClient(handler);
// Selanjutnya dipakai sebagai HttpClient biasa

Selain itu, di seri .NET Core, jika sertifikat punya atribut Key Usage, dokumentasi menyatakan secara eksplisit bahwa ia tidak dipakai untuk pengiriman permintaan kecuali mencakup “Digital Signature”.12 Jika Anda berada di posisi meminta penerbitan sertifikat klien, sampaikan kegunaan (autentikasi klien) dengan benar. HttpClient juga menimbulkan kehabisan soket dan masalah mengikuti DNS jika pola pembuatannya salah. Desain membuat handler berumur panjang dibahas di “Jangan bungkus HttpClient dalam using”.

7.3. Masalah sidik jari yang di-hardcode gagal saat penggantian

Pencarian sidik jari pasti, tetapi jika sidik jari ditanam di kode, setiap pembaruan sertifikat memerlukan build dan rilis. Penanganan di desain ada tiga tahap berikut.

  • Minimum: keluarkan sidik jari ke berkas konfigurasi (appsettings, dan semacamnya) agar dapat diganti tanpa rilis. Tempat konfigurasi dicatat di buku besar 5.3.
  • Satu langkah maju: cari menurut nama subjek atau penerbit, kombinasikan dengan validOnly: true, dan pilih “yang saat ini sah dengan nama itu, NotAfter paling jauh”. Pada periode paralel lama-baru, otomatis beralih ke sertifikat baru. Namun ada risiko memegang sertifikat tidak disengaja bernama sama, jadi pasangkan konfirmasi penerbit dan keluaran log. Selain itu, peralihan otomatis ini hanya terbentuk jika mitra tidak memerlukan pendaftaran sertifikat sebelumnya. Pada API yang memerlukan pendaftaran sebelumnya (5.2), dapat beralih sendiri ke sertifikat yang baru diimpor tetapi belum terdaftar dan komunikasi berhenti, jadi tetaplah pada cara mengeluarkan ke konfigurasi yang beralih setelah konfirmasi pendaftaran selesai.
  • Secara operasional: pada cara apa pun, sisakan di log saat mulai “sertifikat mana (sidik jari, masa berlaku) yang dipilih”. Baik investigasi gangguan maupun pencocokan buku besar, satu baris ini manjur.

8. Hubungan dengan sertifikat penandatanganan kode — store Penerbit Tepercaya

Yang ditangani sampai di sini adalah sertifikat untuk komunikasi (TLS), tetapi di penyimpanan sertifikat hidup dunia lain lagi — penandatanganan kode. Store Penerbit Tepercaya (TrustedPublisher) yang muncul di tabel 2.2 adalah titik temunya: tempat mendaftarkan sertifikat penerbit perangkat lunak bertanda tangan sebagai tepercaya. Ada di lokasi pengguna maupun komputer10, dan dipakai untuk operasi seperti mendistribusikan penerbit aplikasi distribusi internal ke TrustedPublisher tiap PC dengan GPO.

Bagi yang sebagai pihak yang mendistribusikan aplikasi memerlukan penanganan penandatanganan kode dan peringatan SmartScreen (“Windows telah melindungi PC Anda”), dirangkum di artikel terpisah “Alasan munculnya ‘Windows telah melindungi PC Anda’ di Windows”. Pengetahuan artikel ini (dua jalur store, distribusi akar) dapat dipakai apa adanya sebagai prasyarat.

9. Ringkasan

  • Penyimpanan sertifikat ada dua jalur: pengguna (CurrentUser) dan komputer (LocalMachine). certmgr.msc / certlm.msc / drive Cert: adalah tiga jendela melihat hal yang sama. Langkah pertama investigasi adalah menyamakan “store mana yang sedang dibicarakan”.
  • Tempat memasang ditentukan oleh akun yang menjalankan program. Eksekusi tanpa pengawasan (layanan, IIS, tugas) ke penyimpanan komputer; aplikasi interaktif ke penyimpanan pengguna, sebagai prinsip.
  • “Di pengembangan jalan, di produksi tidak ditemukan” disebabkan penyimpanan pengguna pengembang dan penyimpanan pengguna akun layanan adalah dua hal berbeda. Diselesaikan dengan menyamakan ke penyimpanan komputer + StoreLocation.LocalMachine.
  • Penempatan ke penyimpanan komputer dan pemberian izin baca di Kelola kunci privat adalah satu paket. Jangan lupa pemberian ulang saat pembaruan.
  • Impor pfx secara default tidak dapat diekspor. -Exportable hanya saat benar-benar diperlukan. Sertakan juga penyimpanan pfx asli dan kata sandinya ke desain.
  • Kedaluwarsa dicegah dengan inventaris berkala Get-ChildItem Cert: ... -ExpiringInDays dan buku besar sertifikat. Penggantian dalam urutan “tambah → alihkan → konfirmasi → hapus”; waspadai sidik jari di konfigurasi yang lupa diperbarui.
  • Isolasi rantai dengan certutil -urlfetch -verify. Akar CA internal didistribusikan dengan GPO/Intune; operasi memasang self-signed ke akar hanya lingkungan validasi, dengan batas waktu.
  • Di kode, keluarkan sidik jari ke konfigurasi, dan sisakan sertifikat yang dipilih di log. Hanya itu, penanganan gangguan akibat sertifikat jadi jauh berbeda.

Artikel terkait

Area konsultasi terkait

KomuraSoft LLC menangani pengembangan aplikasi bisnis yang menyematkan integrasi Web API bersertifikat klien (API perbankan, konfirmasi kualifikasi daring, dan semacamnya), investigasi gangguan jenis “sertifikat tidak ditemukan” / “setelah diperbarui tidak bisa tersambung”, dan penataan prosedur penggantian sertifikat. Tidak apa-apa berkonsultasi dari tahap belum tahu store mana yang harus dilihat.

Tautan referensi

  1. Microsoft Learn, Local Machine and Current User Certificate Stores. Tentang penyimpanan sertifikat komputer yang lokal terhadap PC, bersama semua pengguna, dan berada di bawah HKEY_LOCAL_MACHINE; penyimpanan sertifikat pengguna yang berbeda per akun pengguna dan berada di bawah HKEY_CURRENT_USER; serta penyimpanan pengguna yang mewarisi isi penyimpanan komputer kecuali store Pribadi (sertifikat yang ditambahkan ke Otoritas Sertifikasi Akar Tepercaya komputer juga muncul di store yang sama pada tiap pengguna). ↩ ↩2 ↩3 ↩4

  2. Microsoft Learn, System Store Locations. Tentang posisi registri CERT_SYSTEM_STORE_CURRENT_USER / CERT_SYSTEM_STORE_LOCAL_MACHINE (masing-masing Software\Microsoft\SystemCertificates di HKEY_CURRENT_USER / HKEY_LOCAL_MACHINE); store logis terdefinisi MY, Root, Trust, CA; store untuk layanan di kunci registri per nama layanan (Software\Microsoft\Cryptography\Services\ServiceName\SystemCertificates); dan adanya store terpisah untuk distribusi Kebijakan Grup. ↩ ↩2 ↩3 ↩4 ↩5

  3. Microsoft Learn, How to: View certificates with the MMC snap-in. Tentang certlm.msc sebagai alat yang mengelola sertifikat perangkat lokal (komputer lokal) dan certmgr.msc yang mengelola sertifikat pengguna saat ini; tiga jenis sasaran snap-in sertifikat — akun komputer, akun pengguna, akun layanan; dan bahwa pengguna yang bukan administrator hanya dapat mengelola sertifikat akun penggunanya sendiri. ↩ ↩2 ↩3 ↩4

  4. Microsoft Learn, about_Certificate_Provider. Tentang drive Cert: PowerShell sebagai ruang nama hierarkis dengan dua lokasi store CurrentUser dan LocalMachine; enumerasi store dan sertifikat dengan Get-ChildItem; parameter -ExpiringInDays yang mengembalikan sertifikat yang kedaluwarsa dalam jumlah hari yang ditetapkan (0 untuk yang sudah kedaluwarsa); parameter dinamis seperti -CodeSigningCert; masa berlaku yang tersimpan di properti NotAfter; dan sertifikat yang diidentifikasi dengan sidik jari. ↩ ↩2 ↩3 ↩4 ↩5 ↩6

  5. Microsoft Learn, How to Modify Private Key Permissions to Support Management Server or Streaming Server. Tentang langkah membuka Kelola kunci privat (Manage Private Keys) di snap-in sertifikat yang sasarannya penyimpanan sertifikat komputer lokal, lalu menambahkan izin akses Baca kepada akun eksekusi layanan (contoh: Network Service) di tab Keamanan. ↩ ↩2 ↩3

  6. Microsoft Learn, Import-PfxCertificate. Tentang Import-PfxCertificate yang mengambil sertifikat dan kunci privat dari berkas PFX ke store yang ditetapkan; bahwa kunci privat yang diambil tidak dapat diekspor jika sakelar -Exportable tidak ditetapkan; serta sintaks dan contoh pemakaian parameter -CertStoreLocation, -Password, -FilePath. ↩ ↩2 ↩3

  7. Microsoft Learn, certutil. Tentang certutil -verify yang memverifikasi sertifikat, CRL, dan rantai sertifikat, dan jika berkas sertifikat CA tidak ditetapkan menyusun rantai lengkap lalu memverifikasi; tersedianya opsi -urlfetch; certutil -store yang men-dump penyimpanan sertifikat; dan opsi -user yang mengakses penyimpanan pengguna sebagai ganti penyimpanan komputer. ↩ ↩2

  8. Microsoft Learn, Distribute Certificates to Client Computers by Using Group Policy. Tentang langkah mengimpor sertifikat ke Otoritas Sertifikasi Akar Tepercaya di bawah Konfigurasi Komputer\Kebijakan\Pengaturan Windows\Pengaturan Keamanan\Kebijakan Kunci Publik Kebijakan Grup dan mendistribusikannya ke komputer klien di domain, serta hak yang diperlukan (setara Domain Admins / Enterprise Admins). ↩

  9. Microsoft Learn, Create trusted certificate profiles in Microsoft Intune. Tentang profil Sertifikat tepercaya Intune sebagai mekanisme mendistribusikan sertifikat CA akar atau perantara ke perangkat terkelola; dipakai untuk menetapkan kepercayaan ke CA akar sebagai prasyarat profil sertifikat SCEP/PKCS; dan bahwa di Windows store tujuan distribusi dapat dipilih: Penyimpanan sertifikat komputer - akar, Penyimpanan sertifikat komputer - perantara, Penyimpanan sertifikat pengguna - perantara. ↩

  10. Microsoft Learn, X509Store Class. Tentang X509Store yang dapat dibangun dengan menetapkan StoreName dan StoreLocation (CurrentUser / LocalMachine); membuka store dengan metode Open dan OpenFlags (ReadOnly, OpenExistingOnly, dan semacamnya); mengambil koleksi sertifikat dengan properti Certificates; nama store standar yang mencakup My, Root, CA, TrustedPublisher, dan semacamnya; serta store TrustedPublisher yang ada di CurrentUser maupun LocalMachine. ↩ ↩2

  11. Microsoft Learn, X509Certificate2Collection.Find(X509FindType, Object, Boolean) Method. Tentang metode Find yang mencari sertifikat dengan X509FindType (FindByThumbprint, dan semacamnya) serta nilai pencarian; dan bahwa hanya sertifikat sah yang lolos verifikasi yang dikembalikan jika argumen ketiga validOnly ditetapkan true. ↩ ↩2

  12. Microsoft Learn, HttpClientHandler.ClientCertificates Property. Tentang properti ClientCertificates sebagai X509CertificateCollection yang disajikan ke server pada autentikasi klien berbasis sertifikat; dan bahwa di .NET Core, jika atribut Key Usage ada pada sertifikat, “Digital Signature” perlu dicakup. ↩ ↩2

Artikel terbaru dengan tag yang sama untuk mendalami topik-topik terdekat.

Halaman-halaman ini menempatkan topik dalam konteks layanan dan keputusan yang lebih luas.

Artikel ini berkaitan langsung dengan layanan berikut.

Pertanyaan yang sering diajukan

Pertanyaan yang sering muncul dalam konsultasi tentang topik artikel ini.

Apa perbedaan certmgr.msc dan certlm.msc?
Sasarannya berbeda. certmgr.msc membuka penyimpanan sertifikat pengguna yang sedang logon (pengguna saat ini, CurrentUser). certlm.msc membuka penyimpanan sertifikat komputer (komputer lokal, LocalMachine). Penyimpanan komputer dipakai bersama oleh semua pengguna dan layanan di PC itu, dan pengelolaannya memerlukan hak administrator. Pengguna yang bukan administrator hanya dapat mengelola penyimpanan penggunanya sendiri. Isi keduanya terbagi ke store logis seperti Pribadi dan Otoritas Sertifikasi Akar Tepercaya. Dari PowerShell, struktur yang sama terlihat sebagai Cert:\CurrentUser dan Cert:\LocalMachine.
Sertifikat klien sebaiknya masuk ke penyimpanan pengguna atau komputer?
Tentukan dari akun yang menjalankan program pemakai sertifikat itu. Aplikasi desktop yang diluncurkan pengguna interaktif: dasar adalah penyimpanan pengguna orang yang memakainya (Cert:\CurrentUser\My). Program yang berjalan tanpa pengawasan sebagai layanan Windows, kumpulan aplikasi IIS, atau Penjadwal Tugas: masukkan ke penyimpanan komputer (Cert:\LocalMachine\My), lalu beri izin baca kunci privat kepada akun eksekusi. Penyimpanan pengguna berbeda per akun, jadi sertifikat yang pengembang pasang di penyimpanan penggunanya sendiri tidak terlihat dari layanan yang berjalan dengan akun lain. Itu penyebab klasik insiden "di pengembangan jalan, di produksi tidak ditemukan".
Jika layanan Windows tidak menemukan atau tidak dapat memakai sertifikat, apa yang harus diperiksa?
Pemeriksaan dua tahap. Pertama, store mana yang dibuka. Jika kode membuka StoreLocation.CurrentUser, itu penyimpanan pengguna akun eksekusi layanan — bukan store administrator yang terlihat di certmgr.msc. Pindahkan sertifikat ke penyimpanan komputer, dan samakan kode ke StoreLocation.LocalMachine. Kedua, apakah kunci privat dapat dibaca. Terlihat di daftar sertifikat dan dapat memakai kunci privat adalah dua hal berbeda. Kunci privat di penyimpanan komputer biasanya secara default hanya dapat diakses administrator dan SYSTEM. Dari certlm.msc, buka Kelola kunci privat pada sertifikat sasaran, lalu beri Baca kepada akun eksekusi layanan (NETWORK SERVICE, dan semacamnya).
Bagaimana menemukan sertifikat yang akan kedaluwarsa lebih dulu dengan PowerShell?
Inventaris dengan Get-ChildItem terhadap drive Cert:. Contohnya Get-ChildItem Cert:\LocalMachine\My | Sort-Object NotAfter | Format-Table Thumbprint, Subject, NotAfter menampilkan store Pribadi di penyimpanan komputer menurut masa berlaku. Parameter -ExpiringInDays mengekstrak hanya sertifikat yang kedaluwarsa dalam jumlah hari yang ditetapkan; 0 mengeluarkan yang sudah kedaluwarsa. Jadikan operasi bulanan di semua server, lalu cocokkan hasilnya dengan buku besar sertifikat. Insiden jenis "kedaluwarsa, dari pagi tidak bisa tersambung" hampir dapat dicegah.

Profil penulis

Halaman perkenalan penulis artikel.

Go Komura

Direktur KomuraSoft LLC

Berspesialisasi dalam pengembangan perangkat lunak Windows, konsultasi teknis, dan investigasi bug, terutama pada proyek dengan sistem yang sudah ada dan bug yang sulit direproduksi.

Kembali ke blog