Panduan praktis penyimpanan sertifikat Windows — pengguna atau komputer, mana yang harus dipakai?
· Go Komura · Sertifikat, Windows, Keamanan, PKI, TLS, PowerShell, Aplikasi bisnis, Sistem informasi
“Setelah memperbarui perangkat konfirmasi kualifikasi daring dan memasukkan ulang sertifikat klien ke PC baru, tidak bisa tersambung.” “Di mesin pengembangan tersambung ke API bank, tetapi setelah dijadikan layanan Windows, dikatakan «sertifikat tidak ditemukan».” “Sebenarnya sertifikat yang terlihat di certmgr.msc dan yang terlihat di certlm.msc, mana yang asli, tidak jelas” — ketika kami mengerjakan integrasi Web API bersertifikat klien sebagai pengembangan perangkat lunak kustom, konsultasi jenis ini datang secara berkala.
Konfirmasi kualifikasi daring fasilitas medis, pengajuan elektronik, API perbankan, EDI dengan mitra. Sertifikat klien yang dulu hanya disentuh staf infrastruktur perusahaan besar, sekarang ditangani staf TI usaha kecil dan menengah serta pengembang aplikasi bisnis. Dan insiden seputar sertifikat sebenarnya terpusat pada beberapa pola saja. Salah tempat memasukkan, lupa hak kunci privat, lupa tenggat — tiga ini.
Artikel ini ditujukan kepada pengembang aplikasi bisnis yang memakai sertifikat klien, dan staf TI yang ditugasi pekerjaan penggantian sertifikat. Dengan keputusan «penyimpanan pengguna atau penyimpanan komputer, mana yang dimasukkan» sebagai poros, artikel ini menata sekaligus dari struktur penyimpanan sertifikat Windows, pemberian hak kunci privat, inventaris kedaluwarsa dengan PowerShell, sampai kode pemakaian dari .NET. Isi berdasarkan informasi primer Microsoft Learn per Agustus 2026.
1. Intinya dulu
- Penyimpanan sertifikat Windows ada dua sistem: «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 pengelolaan juga dua. certmgr.msc membuka penyimpanan pengguna saat ini; certlm.msc membuka penyimpanan komputer lokal. Dari PowerShell,
Cert:\CurrentUserdanCert:\LocalMachine.34 - Mana yang dimasukkan diputuskan dari «siapa program yang memakai sertifikat itu berjalan sebagai». Aplikasi pengguna interaktif ke penyimpanan pengguna; eksekusi tanpa pengawasan layanan Windows, IIS, Penjadwal Tugas ke penyimpanan komputer sebagai prinsip (tabel keputusan bab 3).
- Penyebab «selama pengembangan jalan, setelah dijadikan layanan tidak ditemukan» hampir satu. Sertifikat yang dimasukkan pengembang ke penyimpanan penggunanya sendiri tidak terlihat dari CurrentUser layanan yang berjalan dengan akun lain (bab 3).
- Sertifikat dan kunci privat adalah hal yang berbeda. Hanya memasukkan ke penyimpanan komputer biasanya tidak membuat akun layanan dapat membaca kunci privat. Beri hak baca kepada akun eksekusi di «Kelola kunci privat» certlm.msc.5
- Saat impor pfx, kunci privat secara default tidak dapat diekspor.
Import-PfxCertificatemengambil dalam bentuk kunci privat tidak dapat diekspor ulang kecuali-Exportableditetapkan. Ini bukan insiden, melainkan nilai default yang diinginkan.6 - Kedaluwarsa dicegah dengan otomatisasi inventaris. Sertifikat yang kedaluwarsa dalam jumlah hari yang ditetapkan dapat diekstrak secara mekanis, seperti
Get-ChildItem Cert:\LocalMachine\My -ExpiringInDays 60.4 - Jika sidik jari (thumbprint) di-hardcode di kode atau konfigurasi, mati setiap kali sertifikat diperbarui. Karena sidik jari sertifikat baru pasti berubah. Mengeluarkan ke konfigurasi + periode paralel lama-baru adalah dasar desain (bab 5 dan 7).
Peta pengetahuan artikel ini
Penyimpanan sertifikat Windows terbagi dua sistem, pengguna (CurrentUser) dan komputer (LocalMachine), dan mana yang dimasukkan sertifikat klien diputuskan dari «siapa program itu berjalan sebagai». Layanan Windows yang berjalan tanpa pengawasan adalah satu paket penyimpanan komputer plus pemberian hak akses kunci privat, dan kedaluwarsa sertifikat serta sidik jari yang di-hardcode adalah penyebab klasik gangguan koneksi akibat sertifikat.
flowchart LR
accTitle: Peta pengetahuan panduan praktis penyimpanan sertifikat Windows
accDescr: Diagram yang menunjukkan hubungan penyimpanan sertifikat (pengguna/komputer), sertifikat klien, kunci privat, rantai sertifikat, CA akar dan CA perantara, kedaluwarsa dan sidik jari dengan gangguan koneksi, langkah penggantian, buku besar, dan risiko sertifikat self-signed
certificate_store["penyimpanan sertifikat"]
client_certificate["sertifikat klien"]
windows_service["layanan Windows"]
localmachine_store["penyimpanan sertifikat komputer"]
private_key["kunci privat"]
private_key_acl["hak akses kunci privat"]
certificate_chain["rantai sertifikat"]
intermediate_ca["sertifikat CA perantara"]
root_ca["sertifikat CA akar"]
certificate_expiry["kedaluwarsa sertifikat"]
certificate_failure["gangguan koneksi akibat sertifikat"]
thumbprint_hardcode["sidik jari yang di-hardcode"]
group_policy["Kebijakan Grup"]
intune["Microsoft Intune"]
currentuser_store["penyimpanan sertifikat pengguna"]
certmgr_msc["certmgr.msc"]
certlm_msc["certlm.msc"]
cert_drive["drive Cert:"]
pfx["berkas PFX"]
certutil["certutil"]
code_signing_cert["sertifikat penandatanganan kode"]
trusted_publisher_store["penyimpanan Penerbit Terpercaya"]
desktop_app["aplikasi desktop pengguna interaktif"]
cert_renewal["penggantian sertifikat"]
cert_ledger["buku besar sertifikat"]
self_signed_cert["sertifikat self-signed ad hoc"]
trust_anchor_risk["risiko penyalahgunaan titik kepercayaan"]
cert_selection["pemilihan sertifikat (pencarian)"]
personal_store["penyimpanan «Pribadi» (My)"]
store_mismatch["salah pilih penyimpanan"]
iis_apppool["kumpulan aplikasi IIS"]
task_scheduler["eksekusi tanpa pengawasan Penjadwal Tugas"]
exportable_import["impor yang dapat diekspor"]
key_exfiltration_risk["risiko pengeluaran kunci privat"]
everyone_full_control["pemberian Full Control kepada Everyone"]
partner_registration["pendaftaran sertifikat di pihak mitra"]
cert_switchover["peralihan ke sertifikat baru"]
x509store["kelas X509Store"]
validonly_search["pencarian sertifikat dengan validOnly"]
key_usage["atribut Key Usage"]
config_externalization["mengeluarkan sidik jari ke konfigurasi"]
cert_choice_logging["pencatatan sertifikat yang dipilih"]
windows_service -.->|"menggunakan"| localmachine_store
client_certificate -->|"mensyaratkan"| private_key
windows_service -.->|"mensyaratkan"| private_key_acl
certificate_chain -.->|"mensyaratkan"| intermediate_ca
certificate_chain -->|"mensyaratkan"| root_ca
certificate_expiry -.->|"dapat menyebabkan"| certificate_failure
thumbprint_hardcode -.->|"dapat menyebabkan"| certificate_failure
certificate_failure -.->|"diverifikasi dengan"| certificate_chain
root_ca -.->|"dikonfigurasi dengan"| group_policy
root_ca -.->|"dikonfigurasi dengan"| intune
currentuser_store -->|"diverifikasi dengan"| certmgr_msc
localmachine_store -->|"diverifikasi dengan"| certlm_msc
certificate_store -->|"diverifikasi dengan"| cert_drive
certificate_expiry -->|"diverifikasi dengan"| cert_drive
private_key -.->|"disimpan di"| pfx
certificate_chain -->|"diverifikasi dengan"| certutil
code_signing_cert -.->|"disimpan di"| trusted_publisher_store
desktop_app -.->|"menggunakan"| currentuser_store
root_ca -.->|"disimpan di"| localmachine_store
private_key_acl -.->|"dikonfigurasi dengan"| certlm_msc
cert_renewal -.->|"mencegah"| certificate_failure
cert_ledger -.->|"mencegah"| certificate_expiry
self_signed_cert -.->|"dapat menyebabkan"| trust_anchor_risk
thumbprint_hardcode -->|"tidak disarankan"| cert_selection
self_signed_cert -->|"tidak disarankan"| root_ca
cert_ledger -->|"disarankan untuk"| certificate_expiry
currentuser_store -->|"mewarisi isi"| localmachine_store
client_certificate -->|"disimpan di"| personal_store
store_mismatch -->|"dapat menyebabkan"| certificate_failure
iis_apppool -.->|"menggunakan"| localmachine_store
iis_apppool -->|"mensyaratkan"| private_key_acl
task_scheduler -.->|"menggunakan"| localmachine_store
exportable_import -->|"dapat menyebabkan"| key_exfiltration_risk
everyone_full_control -->|"tidak disarankan"| private_key_acl
cert_renewal -.->|"mensyaratkan"| private_key_acl
partner_registration -.->|"sebaiknya didahului"| cert_switchover
x509store -->|"menggunakan"| certificate_store
validonly_search -.->|"mengurangi"| certificate_failure
client_certificate -.->|"mensyaratkan"| key_usage
config_externalization -->|"disarankan untuk"| cert_selection
cert_choice_logging -->|"disarankan untuk"| certificate_failure
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 keseluruhan penyimpanan sertifikat — dua tempat dan penyimpanan logis
2.1. Dua sistem: pengguna dan komputer
Penyimpanan sertifikat Windows secara besar terbagi ke dua «tempat».1
- Penyimpanan sertifikat komputer (komputer lokal, LocalMachine): satu per PC, bersama bagi semua pengguna dan layanan di PC. Wujudnya di bawah
HKEY_LOCAL_MACHINE\Software\Microsoft\SystemCertificatesdi registri.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 penyimpanan per akun layanan3, wujudnya kunci registri per nama layanan.2 Yang pertama-tama harus dikuasai di praktik adalah dua yang pertama.
Ada satu spesifikasi penting. Tiap penyimpanan logis penyimpanan pengguna, kecuali «Pribadi», mewarisi dan menampilkan isi penyimpanan bernama sama di penyimpanan komputer.1 Misalnya, jika sertifikat CA internal dimasukkan ke «Otoritas Sertifikasi Akar Terpercaya» penyimpanan komputer, sertifikat itu juga muncul di «Otoritas Sertifikasi Akar Terpercaya» semua pengguna. Sebaliknya, hanya penyimpanan «Pribadi» yang tidak diwarisi, jadi sertifikat klien (= yang dimasukkan ke penyimpanan Pribadi) harus Anda putuskan sendiri «dari siapa perlu terlihat». Asimetri ini adalah pemeran utama seluruh artikel ini.
flowchart TB
accTitle: Penyimpanan komputer dan penyimpanan pengguna
accDescr: Penyimpanan komputer satu per PC dan bersama semua pengguna serta layanan; penyimpanan pengguna berbeda per akun, dan selain Pribadi mewarisi serta menampilkan sisi komputer
subgraph LM["komputer (LocalMachine)<br/>satu per PC, bersama semua pengguna dan layanan"]
LMMY["Pribadi (My)"]
LMROOT["Otoritas Sertifikasi Akar Terpercaya (Root)"]
LMCA["Otoritas Sertifikasi Perantara (CA)"]
LMTP["Penerbit Terpercaya (TrustedPublisher)"]
end
subgraph CU["pengguna (CurrentUser)<br/>berbeda per akun"]
CUMY["Pribadi (My)<br/>※tidak diwarisi = tempat yang Anda putuskan sendiri untuk memasukkan"]
CUROOT["Otoritas Sertifikasi Akar Terpercaya (Root)"]
CUCA["Otoritas Sertifikasi Perantara (CA)"]
CUTP["Penerbit Terpercaya (TrustedPublisher)"]
end
LMROOT -.->|"isi diwarisi dan terlihat"| CUROOT
LMCA -.->|"diwarisi"| CUCA
LMTP -.->|"diwarisi"| CUTP
Gambar 1: Penyimpanan pengguna, kecuali Pribadi, mewarisi dan menampilkan isi penyimpanan komputer; tempat memasukkan sertifikat klien harus Anda putuskan sendiri.
2.2. Penyimpanan logis utama
Di dalam tiap tempat, terbagi ke penyimpanan logis menurut peran. Folder yang terlihat di certmgr.msc / certlm.msc itulah, dan saat dilihat dari PowerShell atau perintah, nama internal bahasa Inggris dipakai.24
| Nama tampilan | Nama internal | Tempat memasukkan apa |
|---|---|---|
| Pribadi | My | Sertifikat yang dipakai sendiri (PC ini, pengguna ini). Sertifikat klien dan sertifikat server di sini. Yang terkait kunci privat juga di sini |
| Otoritas Sertifikasi Akar Terpercaya | Root | Sertifikat CA akar yang menjadi titik kepercayaan. Yang di bawah CA yang dimasukkan ke sini «dipercaya» |
| Otoritas Sertifikasi Perantara | CA | Sertifikat CA perantara yang menghubungkan akar dan ujung. Bahan penyusunan rantai |
| Penerbit Terpercaya | TrustedPublisher | Sertifikat yang dipercaya sebagai penerbit perangkat lunak bertanda tangan (bab 8) |
2.3. Tiga jendela intip — certmgr.msc / certlm.msc / drive Cert:
Ada tiga cara melihat penyimpanan yang sama.34
- certmgr.msc: konsol pengelolaan yang membuka penyimpanan pengguna saat ini.
- certlm.msc: konsol pengelolaan yang membuka penyimpanan komputer lokal.
- Drive
Cert:PowerShell: dapat mengoperasikan penyimpanan seperti sistem berkas dalam hierarkiCert:\CurrentUser\...danCert:\LocalMachine\.... Sertifikat diidentifikasi dengan sidik jari.
Selain itu, jika menambahkan snap-in sertifikat secara manual ke mmc.exe, pilih sasaran dari tiga jenis: «akun pengguna», «akun komputer», «akun layanan». Pengguna yang bukan administrator hanya dapat mengelola penyimpanan akun penggunanya sendiri.3
Langkah pertama investigasi gangguan adalah menyelaraskan «penyimpanan mana yang dilihat aplikasi» dan «penyimpanan mana yang Anda lihat». Menyelidiki gangguan layanan sambil memandangi certmgr.msc tidak pernah menghasilkan jawaban karena tempat yang dilihat berbeda.
3. Mana yang dimasukkan — tabel keputusan menurut bentuk eksekusi program
Kriteria keputusan satu. Dengan akun siapa program yang memakai sertifikat itu berjalan.
| Bentuk eksekusi | Akun eksekusi | Penyimpanan yang dimasukkan | Catatan |
|---|---|---|---|
| Aplikasi desktop yang diluncurkan pengguna interaktif | Pengguna yang logon sendiri | Pengguna (Cert:\CurrentUser\My) | Perlu diperkenalkan per akun orang yang memakai. Jika beberapa orang memakai PC bersama, pertimbangkan juga penyimpanan komputer |
| Layanan Windows | LocalSystem / NETWORK SERVICE / akun layanan khusus | Komputer (Cert:\LocalMachine\My) | Selain LocalSystem (NETWORK SERVICE, akun khusus, dll.) pemberian hak baca kunci privat wajib (bab 4). LocalSystem dapat membaca dengan hak SYSTEM default |
| Aplikasi web di IIS | ID kumpulan aplikasi | Komputer | Sama seperti di atas |
| Eksekusi tanpa pengawasan Penjadwal Tugas (dijalankan terlepas dari logon pengguna) | Akun yang ditetapkan pada tugas | Penyimpanan komputer direkomendasikan | Dapat dijalankan juga di penyimpanan pengguna akun eksekusi, tetapi hanya menambah validasi visibilitas profil dan penyimpanan tanpa banyak keuntungan |
| Pengajuan elektronik / autentikasi web di peramban | Pengguna yang logon sendiri | Pengguna | Alami juga dalam arti tidak membiarkan orang selain yang didistribusikan memakainya |
Jika ragu, yang berjalan tanpa pengawasan ke penyimpanan komputer, yang dioperasikan orang ke penyimpanan pengguna.
3.1. Anatomi insiden klasik — «selama pengembangan jalan, setelah dijadikan layanan tidak ditemukan»
Insiden ini dapat direproduksi dengan tepat dengan langkah berikut.
- Pengembang mengimpor pfx dengan mengklik ganda di PC sendiri. Default wizard adalah «pengguna saat ini», jadi sertifikat masuk ke penyimpanan pengguna akun pengembang.
- Aplikasi selama pengembangan berjalan dari Visual Studio, yaitu dengan akun pengembang, jadi membuka
StoreLocation.CurrentUsermenemukan sertifikat. Jalan. - Didaftarkan sebagai layanan Windows di server produksi. Layanan berjalan dengan NETWORK SERVICE atau akun khusus.
CurrentUseryang dibuka kode layanan adalah penyimpanan pengguna akun eksekusi layanan. Itu kosong. «Sertifikat tidak ditemukan».
flowchart TB
accTitle: Selama pengembangan jalan, setelah dijadikan layanan tidak ditemukan
accDescr: Sertifikat yang dimasukkan ke penyimpanan pengguna pengembang tidak terlihat dari CurrentUser layanan yang berjalan dengan akun lain
subgraph DEV["mesin pengembangan"]
D1["impor dengan klik ganda pfx<br/>default wizard «pengguna saat ini»"] --> D2["masuk ke penyimpanan pengguna<br/>akun pengembang"]
D2 --> D3["dijalankan dari Visual Studio<br/>= berjalan dengan akun pengembang"]
D3 --> D4["membuka CurrentUser menemukannya<br/>→ jalan"]
end
subgraph PROD["server produksi"]
P1["didaftarkan sebagai layanan Windows<br/>akun eksekusi NETWORK SERVICE, dll."] --> P2["CurrentUser yang dibuka kode adalah<br/>penyimpanan pengguna akun layanan"]
P2 --> P3["itu kosong<br/>→ «sertifikat tidak ditemukan»"]
end
D4 -.->|"menempatkan program yang sama"| P1
Gambar 2: Penyimpanan pengguna pengembang dan penyimpanan pengguna akun layanan berbeda; jalan selama pengembangan tidak menjamin ditemukan di produksi.
Poinnya, penyimpanan pengguna «ada sebanyak jumlah akun». Meski administrator membuka certmgr.msc dan mengonfirmasi «sudah masuk, kan?», itu penyimpanan administrator sendiri, bukan penyimpanan akun layanan. Penanganannya bukan salinan dadakan, melainkan memasukkan ulang ke penyimpanan komputer, dan menyelaraskan kode ke StoreLocation.LocalMachine. Dan pemberian hak bab berikutnya adalah satu paket.
4. Kunci privat dan hak akses — insiden klasik kedua
4.1. Sertifikat dan kunci privat adalah hal yang 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 memakai kunci privat, jadi «terlihat di daftar» dan «dapat dipakai» adalah masalah yang berbeda. Jika ini dicampur, gangguan yang tampilannya sulit dipahami terjadi: «sertifikat ada tetapi gagal di handshake TLS», «error internal jenis Access Denied muncul».
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 penyimpanan 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, perilaku default.6 Memasukkan semuanya dapat diekspor dengan alasan «agar nanti dapat dimigrasikan» adalah menambah satu jalur pengeluaran kunci privat. Jadikan operasi menyimpan pfx asli dengan aman, dan kunci privat di penyimpanan pada dasarnya tidak dapat diekspor — ini rekomendasi kami. Selain itu, penyimpanan pfx asli dan kata sandinya justru sering dibiarkan teks biasa. Cara berpikirnya ditata di “penyimpanan rahasia aplikasi Windows — menghindari pengaturan teks biasa dengan DPAPI” dan “penanganan kredensial yang aman di PowerShell”.
4.3. Pemberian hak kunci privat kepada akun layanan
Kunci privat sertifikat yang dimasukkan ke penyimpanan komputer biasanya secara default tidak dapat dibaca selain 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, ID kumpulan aplikasi IIS — beri hak baca secara eksplisit kepada akun eksekusi. Langkahnya dapat dilakukan dari UI snap-in sertifikat.5
- Buka certlm.msc (atau snap-in sertifikat sasaran akun komputer).
- Klik kanan sertifikat sasaran di «Pribadi» → «Sertifikat», dan dari «Semua tugas» buka «Kelola kunci privat».
- Di tab «Keamanan», tambahkan akun eksekusi (NETWORK SERVICE, akun layanan khusus, ID kumpulan aplikasi IIS, dll.) dan izinkan «Baca».5
Full Control tidak perlu. Jika hanya untuk tanda tangan, baca 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 hak kunci privat selalu satu paket — hanya menuliskan ini ke prosedur, insiden jenis ini hilang.
5. Mencegah insiden kedaluwarsa — inventaris, penggantian, buku besar
5.1. Inventaris dengan PowerShell
Tanggal kedaluwarsa sertifikat ada di properti NotAfter. Inventaris mekanis dapat dilakukan dengan Get-ChildItem terhadap drive Cert:.4
# Daftar «Pribadi» penyimpanan komputer menurut tanggal kedaluwarsa
Get-ChildItem Cert:\LocalMachine\My |
Sort-Object NotAfter |
Format-Table Thumbprint, Subject, NotAfter
# Ekstrak 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, dan kumpulkan hasil ke email atau buku besar — hanya itu, insiden jenis «kedaluwarsa jadi 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 masukkan» melainkan «tambahkan dulu, lalu beralih, konfirmasi, baru hapus».
- Impor sertifikat baru (pfx) ke penyimpanan yang sama. Sidik jarinya berbeda, jadi lama dan baru dapat hidup bersama di penyimpanan yang sama.
- Beri hak kunci privat sertifikat baru (bab 4). Yang mudah dilupakan saat pembaruan adalah ini. Hak menempel per kunci privat sertifikat, jadi setelah sertifikat diganti, pemberian diulang.
- 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 lama maupun baru. Jika peralihan didahulukan, pihak mitra menolak sertifikat baru dan komunikasi produksi berhenti.
- Alihkan konfigurasi aplikasi ke sertifikat baru, dan konfirmasi operasi.
- Setelah periode yang cukup, hapus sertifikat lama.
flowchart LR
accTitle: Pembaruan sertifikat: tambahkan dulu, lalu beralih
accDescr: Masukkan pfx baru ke penyimpanan yang sama, beri hak, daftarkan sebelumnya ke mitra, lalu alihkan sidik jari, dan setelah periode paralel hapus sertifikat lama
I["1. Impor pfx baru ke penyimpanan yang sama<br/>(lama dan baru hidup bersama)"] --> P["2. Beri hak kunci privat<br/>sertifikat baru"]
P --> R["3. Daftarkan sebelumnya ke mitra<br/>(lanjutkan operasi dengan sertifikat lama)"]
R --> SW["4. Tulis ulang sidik jari konfigurasi,<br/>beralih, konfirmasi operasi"]
SW --> DEL["5. Setelah periode paralel,<br/>hapus sertifikat lama"]
Gambar 3: Urutan penggantian sertifikat adalah tambah → hak → daftarkan sebelumnya → ubah konfigurasi → hapus yang lama; jangan lupa memperbarui sidik jari.
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 cukup. Minimal, buat kolom kegunaan / penerbit / subjek / sidik jari / tempat masuk (nama server + penyimpanan) / akun yang punya hak kunci privat / tanggal kedaluwarsa / tautan ke prosedur pembaruan / penanggung jawab, dan 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 pemilahan, certutil berguna.7
flowchart TB
accTitle: Tiga penyebab klasik terputusnya verifikasi rantai
accDescr: Error kepercayaan terjadi jika CA perantara tidak dapat diperoleh, akar tidak didistribusikan, atau sertifikat ujung kedaluwarsa
LEAF["sertifikat ujung<br/>(sertifikat klien, sertifikat server)"] --> INT["sertifikat CA perantara<br/>tempat: penyimpanan Otoritas Sertifikasi Perantara (CA)"]
INT --> ROOT["sertifikat CA akar<br/>tempat: Otoritas Sertifikasi Akar Terpercaya (Root)"]
INT -.->|"tidak dapat diperoleh<br/>(tidak dari penyajian, AIA, maupun penyimpanan)"| E1["rantai tidak dapat disusun<br/>(penyebab klasik 1)"]
ROOT -.->|"tidak didistribusikan"| E2["error «tidak dipercaya»<br/>(penyebab klasik 2)"]
LEAF -.->|"kedaluwarsa"| E3["error masa berlaku<br/>(penyebab klasik 3)"]
Gambar 4: Rantai terputus jika CA perantara atau akar tidak ditemukan, atau karena masa berlaku; tentukan lapisannya dengan certutil.
:: Susun dan verifikasi rantai berkas sertifikat (dengan pengambilan URL pemeriksaan pencabutan)
certutil -urlfetch -verify client.cer
:: Jika aplikasi sasaran memakai penyimpanan pengguna, tambahkan -user dan verifikasi dalam konteks yang sama
certutil -user -urlfetch -verify client.cer
:: Dump isi penyimpanan (tambahkan -user untuk penyimpanan pengguna)
certutil -store My
certutil -user -store My
certutil -verify memverifikasi sertifikat, CRL, dan rantai, dan jika CACertFile tidak ditetapkan, menyusun rantai lengkap lalu memverifikasi.7 Keluarannya panjang, tetapi dapat dibaca di lapisan mana kepercayaan terputus, dan apakah informasi pencabutan diperoleh. Penyebab khas adalah (1) sertifikat CA perantara tidak dapat diperoleh (mitra TLS tidak mengirimkannya, tidak dapat diambil dari informasi AIA sertifikat, dan tidak masuk ke penyimpanan «Otoritas Sertifikasi Perantara»), (2) akar CA internal tidak didistribusikan ke «Otoritas Sertifikasi Akar Terpercaya», (3) sertifikat itu sendiri kedaluwarsa. CA perantara juga dapat diselesaikan dengan penyajian dari mitra atau pengambilan otomatis lewat AIA, jadi penempatan ke penyimpanan 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 memasukkan secara manual satu per satu, melainkan menaikkan ke mekanisme distribusi.
- Lingkungan Active Directory (GPO): mengimpor sertifikat ke «Otoritas Sertifikasi Akar Terpercaya» di
Konfigurasi komputer\Kebijakan\Pengaturan Windows\Pengaturan keamanan\Kebijakan kunci publikGroup Policy mendistribusikannya ke PC sasaran.8 - Lingkungan pengelolaan Intune: distribusikan sertifikat CA akar/perantara dengan profil «Sertifikat terpercaya». Di Windows, penyimpanan tujuan distribusi (akar/perantara komputer, perantara pengguna) dapat dipilih.9
Seperti dinyatakan di 2.1, jika dimasukkan ke akar penyimpanan komputer, dipercaya dari semua pengguna.1 Karena itu, risiko sebaliknya juga harus dilihat langsung. Operasi memasukkan sertifikat self-signed ke «Otoritas Sertifikasi Akar Terpercaya» adalah menanam titik kepercayaan baru di PC itu. Jika kunci privatnya bocor, menjadi pijakan 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 tenggat».
7. Sudut pandang pengembang — memakai penyimpanan dengan benar dari .NET
7.1. Mencari sidik jari dengan X509Store
Dari .NET, buka penyimpanan 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}, " +
$"tempat={store.Location}\\{store.Name}");
var cert = found[0];
if (!cert.HasPrivateKey)
throw new InvalidOperationException(
$"Sertifikat ada tetapi kunci privat tidak terkait (impor " +
$"dari .cer, dll.): sidik jari={thumbprint}, tempat={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 Ini asuransi agar tidak memegang sertifikat kedaluwarsa, tetapi sertifikat self-signed uji yang rantainya tidak dipercaya juga jatuh ke sisi «tidak ditemukan», jadi saat «sudah masuk tetapi tidak ditemukan» curigai juga di sini. Selain itu, pesan error saat tidak ditemukan, seperti contoh di atas, selalu sertakan penyimpanan mana yang dicari. Waktu investigasi insiden bab 3 berubah berorde.
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, didokumentasikan 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. Selain itu, HttpClient jika pola pembuatannya salah menimbulkan kehabisan soket dan masalah mengikuti DNS. Desain membuat handler berumur panjang dibahas di “jangan bungkus HttpClient dalam using”.
7.3. Masalah sidik jari yang di-hardcode mati saat penggantian
Pencarian sidik jari pasti, tetapi jika sidik jari ditanam di kode, setiap pembaruan sertifikat memerlukan build dan rilis. Penanganan di desain tiga tahap berikut.
- Minimum: keluarkan sidik jari ke berkas konfigurasi (appsettings, dll.) 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,NotAfterpaling 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. - Kencangkan dengan operasi: pada cara apa pun, sisakan di log saat mulai «sertifikat mana (sidik jari, tenggat) yang dipilih». Baik investigasi gangguan maupun pencocokan buku besar, satu baris ini manjur.
8. Hubungan dengan sertifikat penandatanganan kode — penyimpanan «Penerbit Terpercaya»
Yang ditangani sampai di sini adalah sertifikat untuk komunikasi (TLS), tetapi di penyimpanan sertifikat hidup dunia lain lagi — penandatanganan kode. Penyimpanan «Penerbit Terpercaya (TrustedPublisher)» yang muncul di tabel 2.2 adalah titik temunya, tempat mendaftarkan sertifikat penerbit perangkat lunak bertanda tangan sebagai terpercaya. Ada di tempat pengguna maupun komputer10, dan dipakai untuk operasi seperti mendistribusikan penerbit aplikasi distribusi internal ke TrustedPublisher tiap PC dengan GPO.
Bagi yang sebagai «sisi yang mendistribusikan» aplikasi memerlukan penanganan penandatanganan kode dan peringatan SmartScreen («PC Anda dilindungi oleh Windows»), dirangkum di artikel terpisah “alasan «PC Anda dilindungi oleh Windows» muncul di Windows”. Pengetahuan artikel ini (dua sistem penyimpanan, distribusi akar) dapat dipakai apa adanya sebagai prasyarat.
9. Ringkasan
- Penyimpanan sertifikat dua sistem: pengguna (CurrentUser) dan komputer (LocalMachine). certmgr.msc / certlm.msc / drive
Cert:adalah tiga jendela melihat hal yang sama. Langkah pertama investigasi adalah menyelaraskan «penyimpanan yang mana yang dibicarakan». - Tempat memasukkan diputuskan dari «siapa program berjalan sebagai». Eksekusi tanpa pengawasan (layanan, IIS, tugas) ke penyimpanan komputer, aplikasi interaktif ke penyimpanan pengguna sebagai prinsip.
- «Selama pengembangan jalan, di produksi tidak ditemukan» disebabkan penyimpanan pengguna pengembang dan penyimpanan pengguna akun layanan adalah hal yang berbeda. Diselesaikan dengan menyelaraskan ke penyimpanan komputer +
StoreLocation.LocalMachine. - Penempatan ke penyimpanan komputer dan pemberian hak baca di «Kelola kunci privat» satu paket. Jangan lupa pemberian ulang saat pembaruan.
- Impor pfx secara default tidak dapat diekspor.
-Exportablehanya saat benar-benar diperlukan. Sertakan juga penyimpanan pfx asli dan kata sandinya ke desain. - Kedaluwarsa dicegah dengan inventaris berkala
Get-ChildItem Cert: ... -ExpiringInDaysdan buku besar sertifikat. Penggantian dalam urutan «tambah → beralih → konfirmasi → hapus», waspadai kebocoran pembaruan sidik jari di konfigurasi. - Pemilahan rantai dengan
certutil -urlfetch -verify. Akar CA internal didistribusikan dengan GPO/Intune; operasi memasukkan self-signed ke akar hanya lingkungan validasi, dengan tenggat. - Di kode, keluarkan sidik jari ke konfigurasi, dan sisakan sertifikat yang dipilih di log. Hanya itu, penanganan gangguan akibat sertifikat berubah wajah.
Artikel terkait
- Alasan «PC Anda dilindungi oleh Windows» muncul di Windows
- Penyimpanan rahasia aplikasi Windows — menghindari pengaturan teks biasa dengan DPAPI
- Penanganan kredensial yang aman di PowerShell — mengusir kata sandi teks biasa dari skrip
- Jangan bungkus HttpClient dalam using — komunikasi HTTP praktis aplikasi bisnis C#
- Apa yang terjadi saat kartu asuransi My Number disentuhkan — membaca konfirmasi kualifikasi daring dan integrasi rececon dari kode sumber ORCA
Area konsultasi terkait
KomuraSoft LLC menangani pengembangan aplikasi bisnis yang menyematkan integrasi Web API bersertifikat klien (API perbankan, konfirmasi kualifikasi daring, dll.), investigasi gangguan jenis «sertifikat tidak ditemukan» / «setelah diperbarui tidak bisa tersambung», dan penataan prosedur penggantian sertifikat. Tidak apa-apa berkonsultasi dari tahap tidak tahu penyimpanan mana yang harus dilihat.
- Pengembangan aplikasi Windows
- Investigasi bug dan akar masalah
- Konsultasi teknis dan tinjauan desain
- Hubungi kami
Tautan referensi
-
Microsoft Learn, Local Machine and Current User Certificate Stores. Tentang penyimpanan sertifikat komputer yang lokal terhadap PC, bersama semua pengguna, dan di bawah HKEY_LOCAL_MACHINE; penyimpanan sertifikat pengguna per akun pengguna di bawah HKEY_CURRENT_USER; dan penyimpanan pengguna yang mewarisi isi penyimpanan komputer kecuali penyimpanan «Pribadi» (sertifikat yang ditambahkan ke «Otoritas Sertifikasi Akar Terpercaya» komputer juga muncul di penyimpanan sama tiap pengguna). ↩ ↩2 ↩3 ↩4
-
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); penyimpanan logis terdefinisi MY, Root, Trust, CA; penyimpanan untuk layanan di kunci registri per nama layanan (Software\Microsoft\Cryptography\Services\ServiceName\SystemCertificates); dan adanya penyimpanan terpisah untuk distribusi Group Policy. ↩ ↩2 ↩3 ↩4 ↩5
-
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 pengguna yang bukan administrator hanya dapat mengelola sertifikat akun penggunanya sendiri. ↩ ↩2 ↩3 ↩4
-
Microsoft Learn, about_Certificate_Provider. Tentang drive Cert: PowerShell sebagai ruang nama hierarkis dengan dua tempat penyimpanan CurrentUser dan LocalMachine; enumerasi penyimpanan 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; tanggal kedaluwarsa yang disimpan di properti NotAfter; dan sertifikat yang diidentifikasi dengan sidik jari. ↩ ↩2 ↩3 ↩4 ↩5 ↩6
-
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 sasaran penyimpanan sertifikat komputer lokal, dan menambahkan izin akses «Baca» kepada akun eksekusi layanan (contoh: Network Service) di tab «Keamanan». ↩ ↩2 ↩3
-
Microsoft Learn, Import-PfxCertificate. Tentang Import-PfxCertificate yang mengambil sertifikat dan kunci privat dari berkas PFX ke penyimpanan yang ditetapkan; kunci privat yang diambil tidak dapat diekspor jika sakelar -Exportable tidak ditetapkan; dan sintaks serta contoh pemakaian parameter -CertStoreLocation, -Password, -FilePath. ↩ ↩2 ↩3
-
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; opsi -urlfetch yang tersedia; certutil -store yang men-dump penyimpanan sertifikat; dan opsi -user yang mengakses penyimpanan pengguna sebagai ganti penyimpanan komputer. ↩ ↩2
-
Microsoft Learn, Distribute Certificates to Client Computers by Using Group Policy. Tentang langkah mengimpor sertifikat ke «Otoritas Sertifikasi Akar Terpercaya» di bawah
Konfigurasi komputer\Kebijakan\Pengaturan Windows\Pengaturan keamanan\Kebijakan kunci publikGroup Policy dan mendistribusikannya ke komputer klien di domain, serta hak yang diperlukan (setara Domain Admins / Enterprise Admins). ↩ -
Microsoft Learn, Create trusted certificate profiles in Microsoft Intune. Tentang profil «Sertifikat terpercaya» 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 di Windows penyimpanan tujuan distribusi dapat dipilih «Penyimpanan sertifikat komputer - akar», «Penyimpanan sertifikat komputer - perantara», «Penyimpanan sertifikat pengguna - perantara». ↩
-
Microsoft Learn, X509Store Class. Tentang X509Store yang dapat dibangun dengan menetapkan StoreName dan StoreLocation (CurrentUser / LocalMachine); membuka penyimpanan dengan metode Open dan OpenFlags (ReadOnly, OpenExistingOnly, dll.); mengambil koleksi sertifikat dengan properti Certificates; nama penyimpanan standar termasuk My, Root, CA, TrustedPublisher, dll.; dan penyimpanan TrustedPublisher yang ada di CurrentUser maupun LocalMachine. ↩ ↩2
-
Microsoft Learn, X509Certificate2Collection.Find(X509FindType, Object, Boolean) Method. Tentang metode Find yang mencari sertifikat dengan X509FindType (FindByThumbprint, dll.) dan nilai pencarian; dan hanya sertifikat sah yang lolos verifikasi yang dikembalikan jika argumen ketiga validOnly ditetapkan true. ↩ ↩2
-
Microsoft Learn, HttpClientHandler.ClientCertificates Property. Tentang properti ClientCertificates sebagai X509CertificateCollection yang disajikan ke server pada autentikasi klien berbasis sertifikat; dan di .NET Core, jika atribut Key Usage ada pada sertifikat, «Digital Signature» perlu dicakup. ↩ ↩2
Artikel terkait
Artikel terbaru dengan tag yang sama untuk mendalami topik-topik terdekat.
Windows Firewall dan aplikasi bisnis — daftarkan aturan masuk dari penginstal
Penyebab klasik «jalan di mesin pengembangan tetapi tidak bisa berkomunikasi di situs pelanggan» adalah Windows Firewall. Artikel ini men...
Kebijakan audit keamanan Windows dan investigasi log peristiwa di lapangan — menjadi staf IT yang bisa membaca peristiwa 4625
Panduan praktis untuk menjawab permintaan agar log kegagalan masuk diperiksa. Artikel ini membahas hubungan kebijakan audit dasar dan lan...
Panduan praktis Windows LAPS — berhenti memakai kata sandi administrator lokal yang sama di semua PC
Kata sandi administrator lokal yang sama di semua PC adalah lahan subur serangan Pass-the-Hash yang membuat satu pelanggaran menjalar ke ...
OneDrive "File Sesuai Permintaan" dan aplikasi bisnis — asumsi yang dipecah placeholder dan cara menghadapinya
CSV di desktop tidak terbuka, atau impor gagal dengan "file tidak ditemukan" — penyebabnya mungkin Known Folder Move dan File Sesuai Perm...
Volume Shadow Copy (VSS): mekanisme dan praktik — mengapa perangkat lunak cadangan bisa menyalin file yang sedang dipakai
File yang sedang dipakai biasanya tidak bisa disalin karena pelanggaran berbagi — lalu bagaimana perangkat lunak cadangan bisa mengambiln...
Topik terkait
Halaman-halaman ini menempatkan topik dalam konteks layanan dan keputusan yang lebih luas.
Topik teknis Windows
Portal tentang pengembangan Windows, investigasi bug, dan pemanfaatan aset yang ada.
Layanan yang terkait dengan topik ini
Artikel ini berkaitan langsung dengan layanan berikut.
Pengembangan aplikasi Windows
Aplikasi bisnis, integrasi perangkat, dan alat komunikasi, dari kebutuhan hingga pengembangan.
Pertanyaan yang sering diajukan
Pertanyaan yang sering muncul dalam konsultasi tentang topik artikel ini.
- Apa perbedaan certmgr.msc dan certlm.msc?
- Penyimpanan 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 bersama bagi semua pengguna dan layanan di PC, dan pengelolaannya memerlukan hak administrator. Pengguna yang bukan administrator hanya dapat mengelola penyimpanan penggunanya sendiri. Keduanya isinya terbagi ke penyimpanan logis seperti «Pribadi» dan «Otoritas Sertifikasi Akar Terpercaya», dan dari PowerShell struktur yang sama terlihat sebagai Cert:\CurrentUser dan Cert:\LocalMachine.
- Haruskah sertifikat klien dimasukkan ke penyimpanan pengguna atau komputer?
- Putuskan dari «siapa» program yang memakai sertifikat itu berjalan sebagai. Jika aplikasi desktop yang diluncurkan pengguna interaktif, dasar adalah penyimpanan pengguna orang yang memakainya (Cert:\CurrentUser\My). Jika program yang berjalan tanpa pengawasan sebagai layanan Windows, kumpulan aplikasi IIS, atau Penjadwal Tugas, masukkan ke penyimpanan komputer (Cert:\LocalMachine\My) dan beri hak baca kunci privat kepada akun eksekusi. Penyimpanan pengguna berbeda per akun, jadi sertifikat yang dimasukkan pengembang ke penyimpanan penggunanya sendiri tidak terlihat dari layanan yang berjalan dengan akun lain. Ini penyebab klasik insiden «selama pengembangan jalan, di produksi tidak ditemukan».
- Jika layanan Windows tidak menemukan atau tidak dapat memakai sertifikat, apa yang harus dikonfirmasi?
- Konfirmasi dua tahap. Pertama «penyimpanan mana yang dilihat». Jika kode membuka StoreLocation.CurrentUser, itu penyimpanan pengguna akun eksekusi layanan, dan berbeda dari penyimpanan sendiri yang dilihat administrator di certmgr.msc. Pindahkan sertifikat ke penyimpanan komputer, dan selaraskan kode ke StoreLocation.LocalMachine. Kedua «apakah kunci privat dapat dibaca». Terlihat di daftar sertifikat dan dapat memakai kunci privat adalah hal yang berbeda; kunci privat penyimpanan komputer biasanya secara default hanya dapat diakses administrator dan SYSTEM. Dari certlm.msc, buka «Kelola kunci privat» pada sertifikat sasaran, dan beri «Baca» kepada akun eksekusi layanan (NETWORK SERVICE, dll.).
- Bagaimana menemukan kedaluwarsa sertifikat sebelumnya dengan PowerShell?
- Dapat diinventaris dengan Get-ChildItem terhadap drive Cert:. Misalnya Get-ChildItem Cert:\LocalMachine\My | Sort-Object NotAfter | Format-Table Thumbprint, Subject, NotAfter menampilkan daftar penyimpanan Pribadi penyimpanan komputer menurut tanggal kedaluwarsa. Lebih jauh, parameter -ExpiringInDays mengekstrak hanya «sertifikat yang kedaluwarsa dalam jumlah hari yang ditetapkan»; 0 mengeluarkan sertifikat yang sudah kedaluwarsa. Jadikan operasi menjalankannya bulanan terhadap semua server dan mencocokkan hasil dengan buku besar sertifikat, maka insiden jenis «kedaluwarsa jadi 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.