PFX dosyaları hakkında
Tags: pfx, sertifika, openssl
Published: 2021-10-10 18:45:43

## 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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5zxtp0p6lg6hcpnx8bng.png)

## 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. 

```bash
openssl pkcs12 -in tekdosya.pfx -nocerts -out ozelanahtar.key -nodes
```

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.

```bash
openssl pkcs12 -in tekdosya.pfx -nokeys -out sertifikalar.crt
```

## 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-----
```

```
-----BEGIN ENCRYPTED PRIVATE KEY-----
```

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:

```bash
openssl pkcs12 -in tekdosya.pfx -nodes -nocerts | openssl rsa -out ozelanahtar.key
```

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-----
```

## 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.

```sh
-passin pass:"parola1"
```

```sh
-passout pass:"parola2"
```

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

```bash
openssl rsa -in ozelanahtar.key -out parolasizanahtar.key
```

## 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.

```bash
openssl pkcs12 -in tekdosya.pfx -clcerts -nokeys -out clientcert.crt
```

```bash
openssl pkcs12 -in tekdosya.pfx -cacerts -nokeys -out cacert.crt
```

## 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:

```bash
openssl pkcs12 -export -in sertifika1.pem -inkey anahtar1.key -out tekdosya1.pfx
```