Pem dosyası nedir ve diğer OpenSSL Tarafından Oluşturulan Anahtar Dosyası Biçimlerinden farkı nedir?

İki Debian sunucusunun bakımından sorumluyum. Ne zaman güvenlik sertifikalarıyla ilgili bir şey yapmam gerekse, Google'da öğreticiler arıyorum ve sonunda çalışana kadar uğraşıyorum.

Ancak, aramalarımda sık sık farklı dosya formatlarıyla karşılaşıyorum (.key, .csr, .pem), ancak her dosya formatının amacının ne olduğuna dair iyi bir açıklama bulamadım.

Acaba ServerFault'taki iyi insanlar bu konuya biraz açıklık getirebilir mi?

Çözüm

SSL, üzerinde anlaşmaya varılmış konteyner formatları olacağını düşünebileceğiniz kadar uzun süredir kullanılmaktadır. Ve haklısınız, var. Olduğu gibi çok fazla standart var. Bildiklerim bunlar ve eminim başkaları da bana katılacaktır.

  • .csr - Bu bir Sertifika İmzalama İsteğidir. Bazı uygulamalar sertifika yetkililerine gönderilmek üzere bunları oluşturabilir. Asıl biçim RFC 2986'de tanımlanan PKCS10'dur. Talep edilen sertifikanın konu, kuruluş, eyalet gibi temel ayrıntılarının bir kısmını/tamamını ve imzalanacak sertifikanın açık anahtarını içerir. Bunlar CA tarafından imzalanır ve bir sertifika döndürülür. Dönen sertifika genel sertifikadır (genel anahtarı içerir ancak özel anahtarı içermez) ve kendisi birkaç formatta olabilir.
  • .pem - RFC 1421 ile 1424 arasında tanımlanan bu format, yalnızca genel sertifikayı (Apache yüklemeleri ve CA sertifika dosyaları /etc/ssl/certs gibi) ya da genel anahtar, özel anahtar ve kök sertifikaları içeren tüm sertifika zincirini içerebilen bir kapsayıcı formattır. Kafa karıştırıcı bir şekilde, PKCS10 biçimi PEM'e çevrilebildiği için bir CSR'yi de kodlayabilir (örneğin burada kullanıldığı gibi). Adı, güvenli e-posta için başarısız bir yöntem olan [Privacy Enhanced Mail (PEM)]'den (https://en.wikipedia.org/wiki/Privacy-enhanced_Electronic_Mail) gelmektedir, ancak kullandığı kapsayıcı biçimi yaşamaya devam etmektedir ve x509 ASN.1 anahtarlarının base64 çevirisidir.
  • .key - Bu, yalnızca belirli bir sertifikanın özel anahtarını içeren PEM formatlı bir dosyadır ve standartlaştırılmış bir isim değil yalnızca geleneksel bir isimdir. Apache kurulumlarında bu dosya sıklıkla /etc/ssl/private içinde bulunur. Bu dosyalar üzerindeki haklar çok önemlidir ve bazı programlar yanlış ayarlanmışlarsa bu sertifikaları yüklemeyi reddederler.
  • .pkcs12 .pfx .p12 - Başlangıçta RSA tarafından Public-Key Cryptography Standards (kısaltılmış PKCS) içinde tanımlanan "12" varyantı başlangıçta Microsoft tarafından geliştirilmiş ve daha sonra RFC 7292 olarak sunulmuştur. Bu, hem genel hem de özel sertifika çiftlerini içeren parolalı bir kapsayıcı biçimidir. .pem dosyalarının aksine, bu kapsayıcı tamamen şifrelenmiştir. Openssl bunu hem genel hem de özel anahtarları olan bir .pem dosyasına dönüştürebilir: openssl pkcs12 -in file-to-convert.p12 -out converted-file.pem -nodes

Zaman zaman ortaya çıkan birkaç başka format:

  • .der - ASN.1 sözdizimini ikili olarak kodlamanın bir yolu, bir .pem dosyası sadece Base64 kodlu bir .der dosyasıdır. OpenSSL bunları .pem'e dönüştürebilir (openssl x509 -inform der -in to-convert.der -out converted.pem). Windows bunları Sertifika dosyaları olarak görür. Varsayılan olarak, Windows sertifikaları farklı bir uzantıya sahip .DER biçimlendirilmiş dosyalar olarak dışa aktaracaktır. Mesela...
  • .cert .cer .crt - Windows Explorer tarafından sertifika olarak tanınan farklı uzantılı .pem (veya nadiren .der) biçimlendirilmiş bir dosya, .pem değildir.
  • .p7b .keystore - RFC 2315'de PKCS numarası 7 olarak tanımlanan bu format, Windows tarafından sertifika değişimi için kullanılan bir formattır. Java bunları yerel olarak anlar ve genellikle bunun yerine bir uzantı olarak .keystore kullanır. .pem tarzı sertifikaların aksine, bu biçim sertifika yolu sertifikalarını dahil etmek için tanımlı bir yola sahiptir.
  • .crl - Bir sertifika iptal listesi. Sertifika Yetkilileri bunları, süreleri dolmadan önce sertifikaların yetkilerini kaldırmanın bir yolu olarak üretir. Bunları bazen CA web sitelerinden indirebilirsiniz.

Özetle, sertifikaları ve bileşenlerini sunmanın dört farklı yolu vardır:

  • PEM - RFC'ler tarafından yönetilir, tercihen açık kaynaklı yazılımlar tarafından kullanılır. Çeşitli uzantılara sahip olabilir (.pem, .key, .cer, .cert, daha fazlası)
  • PKCS7 - Java tarafından kullanılan ve Windows tarafından desteklenen açık bir standarttır. Özel anahtar malzemesi içermez.
  • PKCS12 - Daha sonra bir RFC'de tanımlanan ve düz metin PEM formatına karşı gelişmiş güvenlik sağlayan bir Microsoft özel standardı. Bu, özel anahtar materyali içerebilir. Tercihen Windows sistemleri tarafından kullanılır ve openssl kullanılarak serbestçe PEM formatına dönüştürülebilir.
  • DER - PEM'in ana formatıdır. Bunu base64 kodlu PEM dosyasının ikili sürümü olarak düşünmek faydalıdır. Windows dışında rutin olarak pek kullanılmaz.

Umarım bu yardımcı olur.

Yorumlar (20)

PEM kendi başına bir sertifika değildir, sadece bir veri kodlama yöntemidir. X.509 sertifikaları yaygın olarak PEM kullanılarak kodlanan bir veri türüdür.

PEM, ASN.1 DER (ayırt edici kodlama kuralları) kullanılarak kodlanmış, ardından Base64 kodlamasından geçirilmiş ve düz metin bağlantı satırları (BEGIN CERTIFICATE ve END CERTIFICATE) arasına sıkıştırılmış bir X.509 sertifikasıdır (yapısı ASN.1 kullanılarak tanımlanmıştır).

Aynı verileri PKCS#7 veya PKCS#12 temsillerini kullanarak da gösterebilirsiniz ve bunu yapmak için openssl komut satırı yardımcı programı kullanılabilir.

PEM'in bariz faydaları, bağlantı satırlarına sahip olması ve 7 bit temiz olması nedeniyle bir e-posta mesajının gövdesine yapıştırmanın güvenli olmasıdır.

RFC1422, anahtarlar ve sertifikalarla ilgili olarak PEM standardı hakkında daha fazla ayrıntıya sahiptir.

Yorumlar (2)