DEV Community

Ali Orhun Akkirman for Açıklab

Posted on

PFX dosyaları hakkında

PFX nedir?

PFX dosya formatı temel olarak "PKCS #12" olarak bilinen standartın öncülüdür. Bu standart, birden fazla kriptografik objenin bir dosyada kullanılmasını sağlamaktadır. İçerisinde tek bir sertfikayı barındıran diğer sertifikalardan en büyük farkı tam olarak budur. Bu standartın genellikle kullanılan kullanım şekli bir sertifika zinciri 'nin sertifikaları ile birlikte "özel anahtar" barındırmasıdır. Bu dosya standartı hakkında bilmemiz gereken bir başka özellik de şifreli ve imzalı olabilmesidir. Açık kaynak kodlu openssl uygulamasının bu standardı kullanarak işlem yapması için pkcs12 parametresi kullanılmaktadır.

Alt Text

OpenSSL ile PFX işlemleri

OpenSSL üzerinde PFX işlemleri içerisindeki sertifikaları ve anahtarları ayırma işlemleridir.

Bir PFX dosyası içindeki özel anahtar'ın çıkartılması (sertifikaların çıkartılmaması) için aşağıdaki komut kullanılmaktadır. Anahtar dosyası örnekte .key olarak gösterilmiştir fakat bazı durumlarda .pem olarak da kullanılabilmektedir.

openssl pkcs12 -in tekdosya.pfx -nocerts -out ozelanahtar.key -nodes
Enter fullscreen mode Exit fullscreen mode

Bir PFX dosyası içindeki sertifikaların çıkartılması (anahtarların çıkartılmaması) için aşağıdaki komut kullanılmaktadır. Sertifika dosyası örnekte .crt olarak gösterilmiştir fakat bazı durumlarda .pem olarak da kullanılabilmektedir.

openssl pkcs12 -in tekdosya.pfx -nokeys -out sertifikalar.crt
Enter fullscreen mode Exit fullscreen mode

PFX'teki özel anahtarlar

PFX dosyasından yukarıda anlatılan yöntem ile çıkartılan özel anahtar PKCS#8 standartına uygundur. Yani aşağıdaki gibi başlayan bir dosya gözükmektedir:

-----BEGIN PRIVATE KEY-----
Enter fullscreen mode Exit fullscreen mode
-----BEGIN ENCRYPTED PRIVATE KEY-----
Enter fullscreen mode Exit fullscreen mode

Oysa ki bazı durumlarda elimizde PKCS#1 standartına uygun RSA şifreleme ile oluşturulmuş bir anahtar olması gerekebilir. Bu gibi durumda yukarıdaki komut yerine aşağıdaki gibi bir komut çalıştırılması gerekmektedir:

openssl pkcs12 -in tekdosya.pfx -nodes -nocerts | openssl rsa -out ozelanahtar.key
Enter fullscreen mode Exit fullscreen mode

Bu şekilde oluşturulan özel anahtar PKCS#1 standartına uygun ve aşağıdaki gibi başlayan bir dosya olarak RSA şifreleme yöntemi ile sunulacaktır.

----------BEGIN RSA PRIVATE KEY-----
Enter fullscreen mode Exit fullscreen mode

Parola konuları

PFX dosyasının kullanılabilmesi için çoğu zaman parola koruması bulunmaktadır. Normal şartlarda OpenSSL sizden bu bilgileri talep etmektedir. Fakat tek komut ile yapılması istenirse aşağıdaki parametreler kullanılabilmektedir. İlk parametre ile var olan PFX dosyasının parolası kullanılırken, ikinci parametre ise çıktı dosyasına da parola koyulup koyulmayacağını anlatmaktadır.

-passin pass:"parola1"
Enter fullscreen mode Exit fullscreen mode
-passout pass:"parola2"
Enter fullscreen mode Exit fullscreen mode

Ayrıca çıkan özel anahtardaki parolanın silinmesi gerektiği zaman aşağıdaki gibi parolayı kaldırabilrisiniz:

openssl rsa -in ozelanahtar.key -out parolasizanahtar.key
Enter fullscreen mode Exit fullscreen mode

Sertifikaların tiplerine göre çıkartılması

PFX konusunda en çok kullanılan bir diğer özellik ise içerisinde birden fazla sertfiikanın yer alması. Ve bu sertifikalar çoğu zaman sertfiika zincirini oluşturmaktadır. Bu zincirin tepesinde de Sertifika Otoritesi (CA) bulunup altta da İstemci (client) bulunmaktadır. PFX dosyasında bu şekilde bir ayrım yapılması isteniyorsa aşağıdaki gibi yapılabilmektedir.

openssl pkcs12 -in tekdosya.pfx -clcerts -nokeys -out clientcert.crt
Enter fullscreen mode Exit fullscreen mode
openssl pkcs12 -in tekdosya.pfx -cacerts -nokeys -out cacert.crt
Enter fullscreen mode Exit fullscreen mode

Yeni bir PFX dosyası oluşturmak

PFX dosyası başta bahsettiğim gibi birden fazla sertifika veya özel anahtarı barındırdığı için aşağıdaki formatta bir komut ile yeni pfx dosyaları oluşturulabilmektedir:

openssl pkcs12 -export -in sertifika1.pem -inkey anahtar1.key -out tekdosya1.pfx
Enter fullscreen mode Exit fullscreen mode

Discussion (0)