Web Siteniz

Windows Server’da PFX Sertifikasından CRT ve Private Key Çıkarma

Yazar admin
15 dakika Okuma Süresi
A+A-
Sıfırla
Windows Server SSL

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:

  1. Domain sertifikası
  2. Ara sertifikalar
  3. 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 exportable seç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:

  • .key dosyası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.

Ayrıca şunları da beğenebilirsiniz

Yorum Bırakın

* Bu formu kullanarak verilerinizin bu web sitesi tarafından saklanmasını ve işlenmesini kabul etmiş olursunuz.

Bu web sitesi deneyiminizi iyileştirmek için çerezler kullanır. Bunu kabul ettiğinizi varsayacağız, ancak isterseniz devre dışı bırakabilirsiniz. Kabul Et Devamı