PKCS#7 (bugünkü adıyla CMS, RFC 5652), imzalı veya şifreli verileri taşımak için tasarlanmış bir kap formatıdır. SSL dünyasında ise en çok, sertifika zincirini özel anahtar olmadan tek dosyada dağıtmak için kullanılır; dosyalar .p7b veya .p7c uzantısı taşır.
SignedData yapısının bileşenleri
- digestAlgorithms: Kullanılan özet algoritmaları.
- encapContentInfo: İmzalanan içerik. Sertifika paketinde bu kısım boştur ("degenerate" SignedData).
- certificates: Pakete eklenen X.509 sertifikaları.
- crls: İsteğe bağlı iptal listeleri.
- signerInfos: İmzalayan bilgileri ve imza değerleri; sertifika paketinde boş olur.
Yani bir .p7b dosyası çoğu zaman sadece sertifika koleksiyonudur; içinde özel anahtar bulunmaz.
Nerede kullanılır?
- Windows ve IIS ortamlarında zincir içe aktarma.
- Bazı Java/Tomcat kurulumlarında zincirin tek seferde aktarılması.
- Kod imzalamada ve belge imzalamada imzalı veri kabı olarak (CMS/PKCS#7 imzaları).
OpenSSL ile dönüştürme
# P7B içindeki sertifikaları PEM olarak çıkar
openssl pkcs7 -in zincir.p7b -print_certs -out zincir.pem
# DER biçimli P7B ise
openssl pkcs7 -inform DER -in zincir.p7b -print_certs -out zincir.pem
# PEM sertifikalardan P7B oluştur
openssl crl2pkcs7 -nocrl -certfile zincir.pem -out zincir.p7b
Sık hatalar
- Nginx/Apache'ye doğrudan .p7b yüklemeye çalışmak; önce PEM'e çevirin.
- Çıkan dosyada sertifika sırasını kontrol etmemek; sunucu sertifikası en üstte, ardından ara sertifikalar gelmelidir.
- P7B'de özel anahtar aramak; anahtar ayrı tutulur (PKCS#8 veya PFX).
Zincir sorunlarını görmek için SSL denetleme aracını, kod imzalama tarafında ise kod imzalama sertifikalarını inceleyebilirsiniz.