ASN.1 (Abstract Syntax Notation One), veri yapılarını tanımlayan bir soyut gösterimdir; DER ise bu yapıların baytlara nasıl serileştirileceğini belirleyen kesin bir kodlama kuralıdır. X.509 sertifikaları, CSR'lar ve anahtarlar bu ikiliyle ifade edilir.
TLV mantığı
DER'deki her öğe Tag-Length-Value (TLV) düzenindedir:
- Tag: Veri tipi (SEQUENCE, INTEGER, OCTET STRING, UTF8String, OBJECT IDENTIFIER vb.).
- Length: İçeriğin bayt uzunluğu.
- Value: Gerçek içerik; iç içe başka TLV'ler de olabilir.
DER, BER'in "kanonik" alt kümesidir: aynı veri için yalnızca tek bir geçerli bayt dizisi vardır. Bu, dijital imzalar için şarttır; çünkü imza, baytlar üzerinden hesaplanır ve farklı kodlama farklı imza demektir.
OID'ler
Algoritmalar ve alanlar, nokta ile ayrılmış nesne tanımlayıcılarıyla (OID) gösterilir. Örneğin 2.5.4.3 commonName, 1.2.840.113549.1.1.11 ise sha256WithRSAEncryption anlamına gelir.
Bir sertifikanın ASN.1 yapısını inceleme
openssl asn1parse -in sertifika.pem
openssl asn1parse -inform DER -in sertifika.der -i
Çıktı, girinti ile iç içe SEQUENCE'leri ve OID'leri listeler. Belirli bir ofsetteki parçayı ayrıştırmak için -strparse seçeneği kullanılır:
openssl asn1parse -in sertifika.pem -strparse 4 -noout -out tbs.der
Sık karşılaşılan durumlar
- "asn1 encoding routines" hataları genellikle dosyanın bozuk, yanlış formatta veya başında/sonunda fazla karakter olduğunu gösterir.
- PEM dosyası aslında DER'in Base64 ile sarılmış halidir;
-informdeğerini doğru seçin.
Biçim dönüşümleri için bilgi bankamızdaki PEM ve DER makalelerine, sertifikanızı doğrulamak için SSL denetleme aracına bakabilirsiniz. Özetle ASN.1 yapıyı, DER ise o yapının değişmez bayt temsilini sağlar.