PKCS#12 Personal Information Exchange Syntax
Gelir İdaresi Başkanlığı teknik kılavuzları, Vergi Usul Kanunu ve UBL-TR standartları referans alınarak doğrulanmıştır.
Tanımı ve Amacı
PKCS#12, bir kullanıcının veya sunucunun özel anahtarını (private key), X.509 dijital kimlik sertifikasını ve güven zincirini oluşturan tüm ara makam sertifikalarını tek bir parola korumalı ikili (binary) dosyada depolayan ve taşıyan endüstriyel kriptografi standardıdır (IETF RFC 7292).
Dosya uzantısı yaygın olarak .p12 veya Microsoft sistemlerinde .pfx (Personal Information Exchange) olarak adlandırılır. e-Dönüşümde bulut tabanlı e-Fatura entegratör imzaları, yazılımsal Mali Mühür kopyaları ve güvenli web servis (mTLS / 2-way SSL) haberleşmesinde kritik bir rol oynar.
İçsel Mimari ve Güvenlik Seviyesi
PKCS#12 dosyaları birden fazla güvenli kasa (SafeBag) yapısından oluşur. Her kasa farklı bir kriptografik nesneyi barındırır:
- KeyBag / ShroudedKeyBag: Özel anahtarın şifreli olarak saklandığı alandır. Şifreleme zayıf parolalara karşı PBKDF2 (Password-Based Key Derivation Function 2) ve AES-256-CBC veya TripleDES algoritmalarıyla korunur.
- CertBag: Kullanıcının açık anahtarını içeren X.509 formatındaki sertifikasını taşır.
- SecretBag: Ek gizli kimlik doğrulama anahtarları veya simetrik şifreleme parolaları barındırabilir.
Mali Mühür ve e-Fatura Entegratörlerindeki Kullanımı
Fiziksel USB token taşımayan veya yüksek hacimli fatura/irsaliye tanzim eden işletmelerde GİB'den alınan kurumsal Mali Mühür, yetkili özel entegratörün güvenli HSM (Hardware Security Module) sunucularına aktarılırken veya bulut imza servislerinde kullanılırken şifreli PKCS#12 konteynerleri halinde işlenir.
PKCS#12 (.p12 / .pfx) dosyası işletmenizin tüzel ıslak imzasını temsil eden özel anahtarı içerir. Bu dosyanın e-posta veya güvenli olmayan harici disklerde parolasız taşınması ya da kaynak kod depolarına (GitHub vb.) yüklenmesi durumunda firmanız adına sahte e-fatura kesilebilir. Dosya izinleri daima kısıtlanmalı (Linux chmod 600) ve en az 16 karakterli karmaşık parolalar kullanılmalıdır.
OpenSSL ile PKCS#12 Yönetim Komutları
Sistem yöneticileri ve entegratör geliştiricileri için en sık kullanılan terminal komutları:
# 1. Sertifika (.crt) ve Gizli Anahtardan (.key) yeni bir .pfx üretme:
openssl pkcs12 -export -out malimuhur.pfx -inkey private.key -in certificate.crt -certfile ca_chain.crt
# 2. Bir .pfx dosyasının içeriğini inceleme ve sertifika bilgilerini okuma:
openssl pkcs12 -info -in malimuhur.pfx -noout
# 3. .p12 dosyasından yalnızca özel anahtarı şifresiz ayıklama (Sunucu yapılandırması için):
openssl pkcs12 -in malimuhur.p12 -nocerts -out private_decrypted.key -nodes
# 4. .p12 dosyasından genel X.509 sertifikasını ayıklama:
openssl pkcs12 -in malimuhur.p12 -clcerts -nokeys -out public_cert.crt
Java Keystore (JKS) ile Entegrasyon
GİB e-Defter ve e-Fatura Java masaüstü uygulamalarında Oracle JDK 9 sonrasında varsayılan anahtar deposu türü doğrudan PKCS12 standardı olarak belirlenmiştir. Bu sayede harici dönüştürücüye ihtiyaç kalmaksızın doğrudan Java uygulamalarına anahtar deposu olarak bağlanabilir.