İçindekiler
SSL sertifikaları Windows Server üzerinde çoğunlukla PFX/P12 formatında kullanılır. PFX dosyası; sunucu sertifikasını, ara sertifikaları ve private key’i tek bir parola korumalı dosya içinde barındırabilir.
Ancak Nginx, Apache, HAProxy, bazı CDN servisleri veya Linux tabanlı uygulamalar sertifikayı genellikle ayrı dosyalar hâlinde ister:
domain.crt
domain.key
Bu yazıda, Windows Server ve Plesk üzerinde kurulu bir sertifikayı yeniden PFX olarak dışa aktarmayı ve ardından OpenSSL kullanarak CRT ile private key dosyalarına ayırmayı ele alacağız.
Senaryo
Windows Server üzerinde Plesk kullanıyoruz ve sertifika aşağıdaki Windows Certificate Store alanına yüklenmiş durumda:
cd "$env:USERPROFILE\Desktop"
Cert:\LocalMachine\WebHosting
Elimizde ayrıca bir PFX dosyası var. Fakat PFX parolasını kullanarak OpenSSL ile sertifikayı çıkarmaya çalıştığımızda aşağıdaki hatayı alıyoruz:
Mac verify error: invalid password?
Bu hata genellikle PFX parolasının yanlış olduğunu gösterir. Sertifika Windows Server üzerinde private key ile birlikte kuruluysa, çözüm olarak sertifikayı Windows Certificate Store’dan yeni bir parola ile tekrar PFX formatında dışa aktarabiliriz.
Gereksinimler
İşleme başlamadan önce aşağıdaki araçların hazır olduğundan emin olun:
- Windows Server
- PowerShell
- OpenSSL
- Sertifikanın Windows Certificate Store üzerinde private key ile birlikte kurulu olması
- Yönetici yetkisi
OpenSSL’in çalışıp çalışmadığını kontrol etmek için:
openssl version
Komut bulunamazsa:
where.exe openssl
Plesk kurulu sistemlerde OpenSSL, Plesk’in kendi dizinlerinden birinde bulunabilir.
1. Windows Certificate Store İçinde Sertifikayı Bulma
PowerShell’i yönetici olarak açın.
Öncelikle WebHosting sertifika deposundaki sertifikaları listeleyelim:
Get-ChildItem Cert:\LocalMachine\WebHosting
Belirli bir alan adına ait sertifikayı bulmak için:
$cert = Get-ChildItem Cert:\LocalMachine\WebHosting |
Where-Object { $_.Subject -like "*ucretsizssl.com.tr*" } |
Select-Object -First 1
Bulunan sertifikanın bilgilerini kontrol edin:
$cert | Format-List Subject, Thumbprint, HasPrivateKey
Beklenen çıktı genel olarak şu şekilde olmalıdır:
Subject : CN=ucretsizssl.com.tr
Thumbprint : ...
HasPrivateKey : True
Buradaki en önemli alan:
HasPrivateKey : True
Değer True ise sertifika Windows Server üzerinde private key ile birlikte kayıtlıdır.
False görünüyorsa yalnızca public sertifika yüklenmiş olabilir. Böyle bir durumda private key’i bu sertifikadan üretmek mümkün değildir.
2. Sertifikayı Yeni Bir PFX Dosyası Olarak Dışa Aktarma
Öncelikle yeni PFX dosyası için güvenli bir parola oluşturalım:
$yeniSifre = Read-Host "Yeni PFX şifresi" -AsSecureString
PowerShell parola girişini ekranda göstermez. Parolayı yazıp Enter tuşuna basın.
Sertifikayı masaüstüne yeni bir PFX dosyası olarak dışa aktarın:
Export-PfxCertificate `
-Cert $cert `
-FilePath "$env:USERPROFILE\Desktop\ucretsizssl-yeni.pfx" `
-Password $yeniSifre
İşlem başarılı olduğunda masaüstünde şu dosya oluşur:
ucretsizssl-yeni.pfx
Bu yeni PFX dosyasının parolası, az önce belirlediğiniz yeni paroladır.
3. PFX Dosyasından CRT Sertifikasını Çıkarma
PowerShell’de masaüstü dizinine geçin:
cd "$env:USERPROFILE\Desktop"
PFX içindeki sunucu sertifikasını CRT formatında çıkarmak için:
openssl pkcs12 `
-in ".\ucretsizssl-yeni.pfx" `
-clcerts `
-nokeys `
-out ".\ucretsizssl.com.tr.crt"
Parametrelerin anlamları:
-in: Kaynak PFX dosyasını belirtir.-clcerts: Yalnızca istemci/sunucu sertifikasını çıkarır.-nokeys: Private key’in çıktıya eklenmesini engeller.-out: Oluşturulacak dosyanın adını belirtir.
Komut çalıştırıldığında şu ifade görünür:
Enter Import Password:
Yeni PFX’i oluştururken belirlediğiniz parolayı girin. Parola yazarken ekranda herhangi bir karakter görünmemesi normaldir.
İşlem sonunda şu dosya oluşur:
ucretsizssl.com.tr.crt
Dosya bir metin düzenleyiciyle açıldığında aşağıdaki yapıda olmalıdır:
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
Bu, sertifikanın PEM formatında olduğunu gösterir.
4. PFX Dosyasından Private Key Çıkarma
Private key’i parolasız olarak çıkarmak için:
openssl pkcs12 `
-in ".\ucretsizssl-yeni.pfx" `
-nocerts `
-nodes `
-out ".\ucretsizssl.com.tr.key"
Parametrelerin anlamları:
-nocerts: Sertifikaların çıktıya eklenmesini engeller.-nodes: Private key’i çıktı dosyasına parolasız yazar.-out: Oluşturulacak private key dosyasını belirtir.
OpenSSL 3.x sürümlerinde -nodes yerine aşağıdaki seçenek de kullanılabilir:
openssl pkcs12 `
-in ".\ucretsizssl-yeni.pfx" `
-nocerts `
-noenc `
-out ".\ucretsizssl.com.tr.key"
İşlem tamamlandığında masaüstünde şu dosya oluşur:
ucretsizssl.com.tr.key
Private key dosyası genellikle şu yapılardan biriyle başlar:
-----BEGIN PRIVATE KEY-----
veya:
-----BEGIN RSA PRIVATE KEY-----
Her iki format da kullanılan OpenSSL sürümüne ve anahtar tipine bağlı olarak geçerli olabilir.
5. Ara Sertifikaları Çıkarma
Bazı web sunucuları yalnızca domain sertifikasını değil, ara sertifika zincirini de ayrı bir dosya olarak ister.
PFX içindeki CA ve ara sertifikaları çıkarmak için:
openssl pkcs12 `
-in ".\ucretsizssl-yeni.pfx" `
-cacerts `
-nokeys `
-out ".\chain.crt"
Oluşacak dosya:
chain.crt
Nginx gibi sistemlerde domain sertifikası ile ara sertifikalar tek bir fullchain dosyasında birleştirilebilir:
Get-Content ".\ucretsizssl.com.tr.crt", ".\chain.crt" |
Set-Content ".\fullchain.crt"
Oluşan dosya:
fullchain.crt
Dosyaların sırası önemlidir:
- Domain sertifikası
- Ara sertifikalar
- Gerekiyorsa diğer chain sertifikaları
6. CRT ile Private Key’in Eşleştiğini Kontrol Etme
Sertifika ve private key dosyalarının aynı anahtar çiftine ait olduğunu doğrulamak önemlidir.
Sertifikanın public key özetini alın:
openssl x509 `
-in ".\ucretsizssl.com.tr.crt" `
-pubkey `
-noout |
openssl sha256
Private key’in public bölümünün özetini alın:
openssl pkey `
-in ".\ucretsizssl.com.tr.key" `
-pubout |
openssl sha256
Her iki komutun ürettiği SHA-256 sonucu aynı olmalıdır.
Örnek:
SHA2-256(stdin)= abcdef123456...
SHA2-256(stdin)= abcdef123456...
Sonuçlar farklıysa CRT ile private key birbirine ait değildir.
Karşılaşılabilecek Hatalar
Mac verify error: invalid password?
Hata:
Mac verify error: invalid password?
PFX parolasının yanlış olduğunu veya dosyanın okunamadığını gösterir.

Kontrol edilmesi gerekenler:
- PFX parolası doğru mu?
- Klavye dili doğru mu?
- Parolada özel karakter var mı?
- Yanlış PFX dosyası mı kullanılıyor?
- Dosya bozulmuş olabilir mi?
Sertifika Windows üzerinde private key ile kuruluysa, sertifikayı yeni bir parola ile yeniden PFX olarak dışa aktarmak çoğu durumda sorunu çözer.
Parolayı PowerShell Komutu Olarak Yazmak
Şu ekran görüldükten sonra:
PS C:\Users\Administrator\Desktop>
PowerShell artık yeni bir komut bekliyor demektir.
Bu aşamada PFX parolası yazılırsa PowerShell bunu komut olarak algılar:
The term '...' is not recognized as the name of a cmdlet
Parola yalnızca aşağıdaki istem görünürken girilmelidir:
Enter Import Password:
Parola yazılırken karakterlerin ekranda görünmemesi normaldir.
Private Key Dışa Aktarılamıyor
Aşağıdaki türde bir hata alınabilir:
The private key is not exportable
Bu durum, sertifika Windows’a import edilirken private key’in dışa aktarılabilir olarak işaretlenmediğini gösterir.
Olası çözümler:
- Orijinal PFX dosyasını kullanmak
- Sertifikayı tekrar oluşturmak
- Sertifikayı CA panelinden reissue etmek
- Yeni bir CSR ve private key üretmek
- Sertifikayı tekrar import ederken
Mark this key as exportableseçeneğini işaretlemek
Windows üzerinde non-exportable olarak kaydedilmiş bir private key, standart yönetim araçlarıyla dışa aktarılamaz.
Güvenlik Önerileri
Private key, SSL sertifikasının en kritik parçasıdır. Ele geçirilmesi hâlinde başka bir sistem sizin sunucunuzmuş gibi davranabilir.
Bu nedenle:
.keydosyasını e-posta veya mesajlaşma uygulamalarıyla göndermeyin.- Private key’i herkesin okuyabildiği bir dizinde saklamayın.
- PFX dosyasına güçlü bir parola verin.
- Private key dosyasının erişim izinlerini sınırlandırın.
- İşlem bittikten sonra geçici PFX dosyalarını güvenli şekilde silin.
- Komut geçmişine parola yazmayın.
- Sohbet, ticket veya destek kayıtlarında paylaşılan parolaları değiştirin.
- Sertifika dosyalarını kaynak kod deposuna yüklemeyin.
Windows üzerinde private key dosyasının erişim yetkilerini sınırlandırmak için örnek:
icacls ".\ucretsizssl.com.tr.key" /inheritance:r
icacls ".\ucretsizssl.com.tr.key" /grant:r "Administrators:F"
icacls ".\ucretsizssl.com.tr.key" /grant:r "SYSTEM:F"
Bu komut, kalıtımla gelen izinleri kaldırır ve dosya erişimini Administrators ile SYSTEM hesaplarıyla sınırlar.
Dosyayı başka bir servis hesabı kullanacaksa ilgili hesaba yalnızca gerekli izin verilmelidir.
