CMD ile Sertifika Yönetimi: Certutil Kullanım Rehberi

Windows ortamlarında sertifika yönetimi, birçok sysadmin’in “gerektiğinde hatırlanan” konulardan biri. Ama iş prod’a düşünce, aceleyle doğru komutu bulmaya çalışmak can sıkıcı olabiliyor. certutil aracı, Windows’un yerleşik sertifika yönetim İsviçre çakısı. PKI altyapısı kurmaktan sertifika doğrulamaya, hash hesaplamaktan CRL yönetimine kadar neredeyse her şeyi yapabiliyor. Bu yazıda günlük hayatta işine yarayacak gerçek dünya senaryolarıyla certutil kullanımını ele alacağız.

certutil Nedir ve Neden Önemli?

certutil.exe, Windows’un Certificate Services bileşeniyle birlikte gelen bir komut satırı aracı. Sadece CA (Certificate Authority) sunucularında değil, tüm Windows istemcilerinde ve sunucularında kullanılabiliyor. PowerShell’in PKI cmdlet’leri güçlü olsa da, certutil bazı işlemlerde çok daha hızlı ve direkt.

Özellikle şu durumlarda certutil hayat kurtarır:

  • Remote Desktop üzerinden bağlandığınızda ve GUI açmak istemediğinizde
  • Toplu sertifika işlemlerini script ile otomatikleştirirken
  • CRL ve OCSP sorunlarını debug ederken
  • Sertifika bilgilerini hızlıca okumak istediğinizde
  • Hash doğrulama ve encoding dönüşümlerinde

Windows Server 2008’den bu yana certutil sürekli gelişti ve şu an Windows Server 2022 üzerinde onlarca sub-command destekliyor.

Temel Kullanım ve Yardım Almak

# Genel yardım
certutil -?

# Belirli bir komut için yardım
certutil -addstore -?

# Mevcut tüm sub-command'leri listele
certutil -v -?

certutil komutları genellikle şu yapıda kullanılır: certutil [seçenekler] [komut] [argümanlar]. Bazı komutlar yönetici yetkisi gerektirirken bazıları normal kullanıcı yetkisiyle çalışır.

Sertifika Depolarıyla Çalışmak

Sertifikaları Listeleme

Windows’ta sertifikalar farklı depolarda tutuluyor. En çok kullanılan depolar şunlar:

  • My: Kişisel sertifikalar (özel anahtarlı)
  • Root: Güvenilen kök CA sertifikaları
  • CA: Ara CA sertifikaları
  • TrustedPublisher: Güvenilen yayıncılar
  • WebHosting: Web hosting sertifikaları
# Kişisel sertifika deposundaki sertifikaları listele
certutil -store My

# Güvenilen kök sertifikaları listele
certutil -store Root

# Ara CA sertifikalarını listele
certutil -store CA

# Makine deposu yerine kullanıcı deposuna bak
certutil -user -store My

# Belirli bir sertifikayı seri numarasıyla bul
certutil -store My "1a2b3c4d5e6f"

Gerçek dünya senaryosu: Bir uygulama sertifika hatası veriyor ve hangi sertifikaların kurulu olduğunu kontrol etmeniz gerekiyor. certutil -store My komutu size tüm kişisel sertifikaları, son kullanma tarihlerini ve thumbprint’lerini gösterecek.

Sertifika İçe ve Dışa Aktarma

# PFX dosyasından sertifika içe aktar (makine deposuna)
certutil -importpfx "C:certsmycert.pfx"

# Belirli bir depoya içe aktar
certutil -importpfx -p "sifre123" "C:certsmycert.pfx" My

# Sertifikayı CER formatında dışa aktar (thumbprint ile)
certutil -store My "thumbprint_degeri" "C:certsexported.cer"

# PEM formatındaki sertifikayı içe aktar
certutil -addstore Root "C:certsrootca.cer"

# Sertifikayı Root deposundan sil
certutil -delstore Root "thumbprint_degeri"

Dikkat: -importpfx komutu özel anahtarı da dahil eder. Özel anahtarın güvenli bir şekilde taşındığından emin olun ve geçici olarak oluşturduğunuz PFX dosyalarını işlem sonrasında silin.

Sertifika Bilgilerini Okumak

Dosyadan Sertifika Bilgisi Alma

# CER/CRT dosyasının içeriğini oku
certutil -dump "C:certsserver.cer"

# Daha ayrıntılı bilgi için -v (verbose) kullan
certutil -v -dump "C:certsserver.cer"

# PFX dosyasını incele (şifre gerekebilir)
certutil -dump "C:certsserver.pfx"

# PEM/Base64 formatındaki dosyayı oku
certutil -dump "C:certsserver.pem"

certutil -dump komutu sertifikanın Subject, Issuer, geçerlilik tarihleri, Subject Alternative Names (SAN), Key Usage ve Extended Key Usage gibi kritik bilgileri döker. Bir sertifikanın hangi domain’leri kapsadığını hızlıca kontrol etmek için ideal.

Uzak Sunucunun Sertifikasını Kontrol Etme

# Bir web sunucusunun sertifikasını doğrudan kontrol et
certutil -verify -urlfetch "C:certsserver.cer"

# URL'den sertifika bilgisini al
certutil -url "C:certsserver.cer"

Hash Doğrulama ve Dosya Bütünlüğü

Bu certutil‘in en az bilinen ama en çok işe yarayan özelliklerinden biri. Linux’taki md5sum veya sha256sum gibi dosya hash’lerini hesaplamak için kullanabilirsiniz.

# MD5 hash hesapla
certutil -hashfile "C:downloadssetup.exe" MD5

# SHA1 hash hesapla
certutil -hashfile "C:downloadssetup.exe" SHA1

# SHA256 hash hesapla (güvenlik açısından önerilen)
certutil -hashfile "C:downloadssetup.exe" SHA256

# SHA512 hash hesapla
certutil -hashfile "C:downloadssetup.exe" SHA512

Gerçek dünya senaryosu: Bir yazılım satıcısından ISO veya kurulum paketi indirdiniz. Satıcının web sitesinde SHA256 hash değeri yayınlıyorsa, indirdiğiniz dosyanın bütünlüğünü doğrulamak için:

certutil -hashfile "C:downloadsWindows_Server_2022.iso" SHA256

Çıktıdaki hash değerini satıcının web sitesindeki değerle karşılaştırıyorsunuz. Eşleşmiyorsa dosya bozuk veya değiştirilmiş demek.

Base64 ve Encoding Dönüşümleri

certutil encoding dönüşümleri için de kullanılır. Özellikle sertifikaları farklı formatlar arasında çevirirken işe yarar.

# Binary/DER formatını Base64/PEM'e çevir
certutil -encode "C:certsserver.cer" "C:certsserver_base64.cer"

# Base64/PEM formatını Binary/DER'e çevir
certutil -decode "C:certsserver_base64.cer" "C:certsserver.der"

# Hex dump al
certutil -encodehex "C:certsserver.cer" "C:certsserver.hex"

Senaryo: Linux tabanlı bir sistemden aldığınız PEM formatındaki sertifikayı Windows uygulamasına yüklerken sorun yaşıyorsunuz. certutil -decode ile DER formatına çevirip tekrar deneyin.

CSR Oluşturma ve Sertifika İsteme

INF Dosyasıyla CSR Oluşturma

Önce bir INF (policy) dosyası oluşturun:

# csr_config.inf dosyasını oluşturun, içeriği şöyle olmalı:
# [NewRequest]
# Subject = "CN=www.sirket.com,O=Sirket AS,L=Istanbul,S=Istanbul,C=TR"
# KeySpec = 1
# KeyLength = 2048
# Exportable = TRUE
# MachineKeySet = TRUE
# SMIME = FALSE
# PrivateKeyArchive = FALSE
# UserProtected = FALSE
# UseExistingKeySet = FALSE
# ProviderName = "Microsoft RSA SChannel Cryptographic Provider"
# ProviderType = 12
# RequestType = PKCS10
# KeyUsage = 0xa0
# [EnhancedKeyUsageExtension]
# OID=1.3.6.1.5.5.7.3.1 ; Server Authentication
# [Extensions]
# 2.5.29.17 = "{text}"
# _continue_ = "dns=www.sirket.com&"
# _continue_ = "dns=sirket.com&"
# CSR oluştur
certutil -new "C:certscsr_config.inf" "C:certsserver.csr"

# Oluşturulan CSR'ı kontrol et
certutil -dump "C:certsserver.csr"

# CSR'ı CA'ya gönder (internal CA varsa)
certutil -submit -config "CA_SUNUCUCA_ADI" "C:certsserver.csr"

CA ve PKI Yönetimi

Certificate Authority Bilgilerini Görme

# Mevcut CA yapılandırmasını görüntüle
certutil -getconfig

# Ağdaki CA'ları listele
certutil -CA

# Belirli bir CA'nın bilgilerini al
certutil -config "CA_SUNUCUCA_ADI" -info

# CA sertifikasını al
certutil -config "CA_SUNUCUCA_ADI" -ca.cert "C:certsca.cer"

CRL (Certificate Revocation List) Yönetimi

CRL yönetimi PKI altyapısının en kritik parçalarından biri. CRL güncel değilse veya erişilemiyorsa, sertifika doğrulama başarısız olur ve bu çok ciddi sorunlara yol açar.

# CRL'i yayınla (CA sunucusunda çalıştır)
certutil -CRL

# Mevcut CRL bilgisini görüntüle
certutil -store -enterprise Root

# CRL dosyasını incele
certutil -dump "C:WindowsSystem32CertSrvCertEnrollsirket-CA.crl"

# URL'den CRL'i doğrula
certutil -verify "C:certsserver.cer"

# CRL cache'ini temizle
certutil -URLcache CRL delete

# OCSP cache'ini temizle
certutil -URLcache OCSP delete

# Tüm URL cache'ini temizle
certutil -URLcache * delete

Gerçek dünya senaryosu: Kullanıcılar VPN bağlantısında “sertifika geçersiz” hatası alıyor. CRL distribution point’e erişilemiyor olabilir. Önce cache’i temizleyip sonra sertifika doğrulamasını tekrar deneyin. Sorun devam ediyorsa CRL’in geçerlilik süresini kontrol edin.

Sertifika Doğrulama

# Sertifikanın zincirini doğrula
certutil -verify "C:certsserver.cer"

# URL'lerden CRL/OCSP bilgisini de çekerek doğrula
certutil -verify -urlfetch "C:certsserver.cer"

# Belirli bir CRL ile doğrula
certutil -verify "C:certsserver.cer" "C:certsissuer.crl"

# Sertifika zincirini oluştur ve kaydet
certutil -verify -urlfetch "C:certsserver.cer" "C:certschain.p7b"

-urlfetch parametresi özellikle önemli. Bu parametre olmadan certutil sadece local cache’e bakıyor. -urlfetch ile birlikte CRL distribution point ve OCSP URL’lerine gerçekten bağlanıp güncel revocation bilgisini çekiyor.

Script ile Toplu Sertifika Yönetimi

Gerçek dünyada tek tek sertifika yönetmek yerine batch scriptler yazmanız gerekiyor. İşte birkaç pratik örnek:

Sona Eren Sertifikaları Bulma

@echo off
echo Surada bitmekte olan sertifikalar kontrol ediliyor...

certutil -store My > C:tempcerts_raw.txt 2>&1

findstr /i "NotAfter|Subject|SerialNumber" C:tempcerts_raw.txt > C:tempcerts_expiry.txt

echo Sonuclar C:tempcerts_expiry.txt dosyasina yazildi.
type C:tempcerts_expiry.txt

Sertifikayı Otomatik İçe Aktarma

@echo off
SET PFX_PATH=C:deploycertificatesapp_cert.pfx
SET PFX_PASS=SertifikaSifresi
SET CERT_STORE=My

echo Sertifika ice aktariliyor...
certutil -importpfx -p %PFX_PASS% "%PFX_PATH%" %CERT_STORE%

IF %ERRORLEVEL% EQU 0 (
    echo Sertifika basariyla ice aktarildi.
) ELSE (
    echo HATA: Sertifika ice aktarma basarisiz oldu. Hata kodu: %ERRORLEVEL%
    exit /b 1
)

echo Sertifika doğrulaniyor...
certutil -store %CERT_STORE% | findstr /i "Subject"

Tüm Sunuculara Sertifika Dağıtma

@echo off
REM Birden fazla sunucuya aynı anda root sertifikası dağıtmak için
REM Bu script PsExec ile birlikte kullanılabilir

SET ROOT_CERT=C:certsinternal_root_ca.cer
SET SERVERS=server01 server02 server03 server04

FOR %%S IN (%SERVERS%) DO (
    echo %%S sunucusuna sertifika kopyalaniyor...
    copy "%ROOT_CERT%" "\%%SC$temproot_ca.cer"
    
    echo %%S sunucusuna sertifika kuruluyor...
    psexec \%%S certutil -addstore Root "C:temproot_ca.cer"
    
    IF %ERRORLEVEL% EQU 0 (
        echo %%S: Basarili
    ) ELSE (
        echo %%S: BASARISIZ - Manuel kontrol gerekli
    )
)

Troubleshooting Senaryoları

Senaryo 1: IIS Sertifikası Sorunları

IIS üzerinde SSL bağlaması yapıldı ama site https ile çalışmıyor. Önce sertifikanın doğru yerde olup olmadığını kontrol edin:

# Kişisel depodaki sertifikaları listele ve özel anahtarı olan sertifikaları bul
certutil -store My

# Sertifikanın özel anahtarıyla eşleşip eşleşmediğini kontrol et
certutil -verifystore My "thumbprint_degeri"

# Sertifika bilgilerini detaylı gör
certutil -v -store My "thumbprint_degeri"

Eğer sertifikanın yanında “CERT_STORE_PROV_SYSTEM” görüyorsanız ama özel anahtar yoksa, PFX’i tekrar içe aktarmanız gerekiyor.

Senaryo 2: Certificate Trust Store Temizliği

Kurumsal ortamlarda zamanla gereksiz sertifikalar birikir. Düzenli temizlik şart:

# Root deposundaki TÜM sertifikaları listele ve tarihleriyle göster
certutil -v -store Root | findstr /i "Subject|NotAfter|Thumbprint"

# Süresi dolmuş sertifikaları bul
certutil -store Root | findstr "NotAfter"

# Belirli bir sertifikayı sil (thumbprint ile)
certutil -delstore Root "a1b2c3d4e5f6..."

# Kullanıcı deposundan sil
certutil -user -delstore Root "a1b2c3d4e5f6..."

Senaryo 3: OCSP ve CRL Debug

# Sertifikanın revocation durumunu kontrol et
certutil -verify -urlfetch "C:certsproblematic_cert.cer"

# URL cache içeriğini görüntüle
certutil -URLcache

# Belirli bir URL'nin cache durumunu gör
certutil -URLcache CRL

# Cache'den belirli bir URL'yi sil
certutil -URLcache "http://crl.sirket.com/sirket-CA.crl" delete

# Policy modülü bilgilerini görüntüle
certutil -config "CA_SUNUCUCA_ADI" -policy

Önemli Parametreler ve Bayraklar

Sık kullandığım parametreler şunlar:

  • -v: Verbose modu, daha ayrıntılı çıktı verir
  • -silent: Ekrana yazmadan çalışır, script’lerde kullanışlı
  • -f: Force, var olan dosyanın üzerine yazar
  • -user: Makine deposu yerine kullanıcı deposunu hedefler
  • -enterprise: Enterprise (AD’den yayınlanan) mağazalarını hedefler
  • -group: Group Policy ile gelen sertifika depolarını gösterir
  • -config: Hangi CA’yı hedefleyeceğinizi belirtir, format: "SunucuAdiCA-Adi"
  • -p: PFX işlemlerinde şifre belirtmek için kullanılır
  • -csp: Kullanılacak cryptographic service provider’ı belirtir

Güvenlik Notları

certutil güçlü bir araç ama dikkatli kullanılması gerekiyor:

  • Root deposuna ekleme yönetici yetkisi gerektirir ve yanlış bir sertifika eklemek ciddi güvenlik açıklarına yol açabilir. Sadece güvenilir kaynaklardan gelen sertifikaları ekleyin.
  • PFX şifrelerini script içine düz metin olarak yazmaktan kaçının. Bunun yerine Windows Credential Manager veya Azure Key Vault gibi çözümler kullanın.
  • certutil -URL komutu açtığınız GUI ile dış URL’lere bağlanabilir. Kısıtlı ortamlarda buna dikkat edin.
  • CRL cache temizleme işlemini prod ortamında yaparken dikkatli olun. Temizleme sırasında kısa süreli sertifika doğrulama gecikmeleri yaşanabilir.
  • Sertifika silme işlemlerini geri alamazsınız. Silmeden önce sertifikayı dışa aktarın.

Sonuç

certutil, Windows PKI dünyasında neredeyse her işi yapabilecek bir araç. Sertifika içe/dışa aktarmadan CRL yönetimine, hash doğrulamadan CSR oluşturmaya kadar geniş bir yelpazede kullanılıyor. Özellikle toplu işlemler ve troubleshooting senaryolarında GUI’ye göre çok daha verimli.

Günlük operasyonlarda en çok işe yarayan komutları hatırlamak zor olabiliyor. Kendi cheat sheet’inizi oluşturmanızı öneririm. Başlangıç noktası olarak şunları ezberleyin: sertifika listelemek için certutil -store My, dosya hash’i için certutil -hashfile dosya SHA256, sertifika doğrulamak için certutil -verify -urlfetch sertifika.cer ve CRL cache temizlemek için certutil -URLcache * delete. Bu dört komut bile pek çok acil durumda sizi kurtaracaktır.

PKI altyapısı karmaşık bir konu ve certutil bu karmaşıklığı yönetmeyi biraz daha kolaylaştırıyor. Komutları prod’da kullanmadan önce test ortamında denemenizi, özellikle silme ve içe aktarma işlemlerinde dikkatli olmanızı öneririm. Sorularınız veya eklemek istediğiniz senaryolar varsa yorumlarda buluşalım.

Yorum yapın