OpenSSL API'si: Temel Yapılar ve Tuzaklar
EVP API'lerinde, BIO soyutlamalarında ve en yaygın OpenSSL API'si yanlış kullanım kalıplarında yolunuzu bulun.
OpenSSL API'si: Temel Yapılar ve Tuzaklar, CoddyKit'te ücretsiz bir Cryptology Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Cryptology Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Cryptology Academy kursu toplamda 4 dersten oluşur.
EVP API: Yüksek Düzeyli Arayüz
EVP (Zarf) API'si, OpenSSL'in kriptografik işlemler için sunduğu yüksek düzeyli arayüzdür ve uygulama kodunda kullanılması gereken doğru API'dir. Algoritmaya özgü ayrıntıları tutarlı bir arayüzün arkasında soyutlar, ENGINE ve sağlayıcı tabanlı donanım hızlandırmasını otomatik olarak destekler, dolgulama ve kip ayrıntılarını doğru biçimde yönetir. OpenSSL'in daha düşük düzeyli, algoritmaya özgü API'leri modern sürümlerde kullanımdan kaldırılmıştır ve bunlardan kaçınılmalıdır.
Simetrik Şifreleme için EVP_CIPHER_CTX
OpenSSL'de simetrik şifreleme, EVP_CIPHER_CTX bağlam nesnesini kullanır. İşlem sırası şöyledir: bağlamı ayırmak için EVP_CIPHER_CTX_new, şifreleme algoritması ve anahtarla başlatmak için EVP_EncryptInit_ex, verileri işlemek için EVP_EncryptUpdate'i yinelemeli olarak çağırmak, son bloğu tamamlayıp kalan çıktıyı almak için EVP_EncryptFinal_ex ve belleği serbest bırakmak için EVP_CIPHER_CTX_free. EncryptFinal_ex adımını atlamak, kesilmiş çıktı üreten yaygın bir hatadır.
Özetleme için EVP_MD_CTX
İleti özeti oluşturma da benzer şekilde EVP_MD_CTX kullanır: EVP_MD_CTX_new, algoritmayla (EVP_sha256(), EVP_sha3_256() vb.) EVP_DigestInit_ex, veri parçalarıyla EVP_DigestUpdate ve özeti almak için EVP_DigestFinal_ex. HMAC işlemleri ayrı bir HMAC_CTX veya daha yeni olan EVP_MAC API'sini kullanır. EVP soyutlaması, tek bir işlev çağrısı değişikliğiyle özet algoritmalarını değiştirebilmenizi sağlar.
Asimetrik Anahtarlar için EVP_PKEY
EVP_PKEY, OpenSSL'deki birleşik asimetrik anahtar nesnesidir ve RSA, ECDSA, Ed25519, DH ile diğer algoritmaları tek bir arayüz altında destekler. Anahtarlar PEM veya DER dosyalarından PEM_read_PrivateKey ve PEM_read_PUBKEY ile okunabilir ya da EVP_PKEY_keygen ile oluşturulabilir. EVP_PKEY_sign ve EVP_PKEY_verify, aynı işlev çağrılarını kullanarak her anahtar türü için imzalama ve doğrulama işlemlerini gerçekleştirir.
G/Ç için BIO Soyutlaması
BIO (Temel G/Ç), TLS ile korunan veya ham verilerin bir BIO nesneleri zinciri üzerinden okunup yazılmasını sağlayan OpenSSL G/Ç soyutlama katmanıdır. Bir BIO zinciri, BIO_new_ssl (TLS katmanı) ile BIO_new_connect'in (TCP bağlantısı) birbirine zincirlenmesiyle oluşturulabilir. SSL BIO'suna yazmak verileri otomatik olarak şifreleyip gönderir; okumak ise alınan verilerin şifresini çözer. BIO nesneleri dosyaları, yuvaları, bellek arabelleklerini ve filtreleri (base64, arabelleğe alma) destekler.
SSL_CTX ve SSL Nesneleri
OpenSSL'deki TLS bağlantıları iki nesne kullanır: SSL_CTX (bağlam), sertifika, özel anahtar, CA sertifika paketi, protokol sürümü sınırları ve şifreleme algoritması listesinden oluşan ortak yapılandırmayı depolar. SSL, bu bağlamdan türetilen tek bir bağlantıyı temsil eder. Uygulama başına bir SSL_CTX oluşturun, ardından her bağlantı için bundan SSL nesneleri oluşturun. SSL_read ve SSL_write düz metin aktarır; OpenSSL tüm TLS çerçeveleme ve şifreleme işlemlerini dahili olarak yönetir.
Kritik Tuzak: Dönüş Değerlerini Yok Saymak
En tehlikeli OpenSSL hatası, dönüş değerlerini yok saymaktır. EVP_EncryptFinal_ex, SSL_read ve SSL_write, hataları belirtmek için negatif değerler veya sıfır döndürür. SSL_get_error'ı denetlemeden bir döngü içinde SSL_read çağırmak sonsuz döngülere yol açabilir veya hataların gözden kaçmasına neden olabilir. Başarısız olabilecek her OpenSSL işlevinin dönüş değeri denetlenmelidir; başarısızlıklar genellikle el sıkışmasının başarısız olması veya sertifika doğrulama hataları gibi güvenlikle ilgili koşullara işaret eder.
Tuzak: SSL_get_error Denetimi Yapmamak
SSL_read ve SSL_write, G/Ç için bekledikten sonra işlemin yeniden denenmesi gerektiğini belirten SSL_ERROR_WANT_READ veya SSL_ERROR_WANT_WRITE döndürebilir. Bunlar gerçek hatalar değil, engellemesiz G/Ç bildirimleridir. SSL_get_error'ı çağırmayan ve want-read/want-write durumlarına doğru dallanmayan kod ya yoğun bir döngüye girer ya da bu durumları yanlışlıkla hata olarak değerlendirir. TLS G/Ç işlemlerinden dönen negatif değerleri yorumlamak için her zaman SSL_get_error'ı kullanın.
Kullanımdan Kaldırılmış Düşük Düzeyli API'ler
OpenSSL, yeni kodlarda kullanılmaması gereken birçok kullanımdan kaldırılmış düşük düzeyli işlev içerir: DES_encrypt1'e doğrudan çağrılar, EVP katmanı olmadan SHA1 veya MD5 özet işlevlerinin doğrudan kullanılması, EVP_PKEY_sign yerine RSA_private_encrypt ve AES_encrypt (kimlik doğrulaması olmayan AES ECB). Bu API'ler güvenlik denetimlerini atlar, kullanımdan kaldırılmış algoritmalar kullanır veya EVP eşdeğerlerinden daha az güvenlidir. Derleyici uyarıları, kullanımdan kaldırılmış API kullanımını çoğu zaman bildirir.
OpenSSL Kodunda Bellek Sızıntıları
OpenSSL açık bellek yönetimi kullanır; ayrılan her nesne açıkça serbest bırakılmalıdır. Yaygın bellek sızıntıları arasında şifrelemeden sonra EVP_CIPHER_CTX_free çağrısını unutmak, bağlantıyı kapattıktan sonra SSL_free çağrısını yapmamak veya sertifika doğrulamasından sonra X509_free çağrısını yapmamak bulunur. Uzun süre çalışan sunucularda bu sızıntılar giderek bellek tükenmesine yol açar. Geliştirme sırasında OpenSSL bellek sızıntılarını algılamak için valgrind veya AddressSanitizer gibi araçları kullanın.
OpenSSL 3.0 Sağlayıcı Modeli
OpenSSL 3.0, donanım hızlandırması için eski ENGINE API'sinin yerine sağlayıcı modelini getirdi. Sağlayıcılar, kriptografik algoritmaları uygulayan ve yüklenebilen modüllerdir: varsayılan sağlayıcı (yazılım), eski sağlayıcı (daha eski algoritmalar), FIPS sağlayıcısı (FIPS 140-2 doğrulamalı) ve HSM'ler için üçüncü taraf sağlayıcılar. FIPS sağlayıcısı, uygulama kodunu değiştirmeden kullanılabilir algoritmaları FIPS 140-2 tarafından onaylananlarla sınırlayarak uyumlu çalışmayı sağlar.
EVP API'sinin Önemi
OpenSSL EVP API'si neden algoritmaya özgü düşük düzeyli API'lere tercih edilir?
OpenSSL API Özeti
OpenSSL API özeti: her zaman EVP yüksek düzeyli API'sini kullanın; simetrik işlemler için EVP_CIPHER_CTX, özetleme için EVP_MD_CTX, asimetrik anahtarlar için EVP_PKEY, G/Ç soyutlaması için BIO zincirleri, TLS bağlantıları için SSL_CTX ve SSL kullanın; dönüş değerlerini her zaman denetleyin ve SSL_get_error'ı çağırın; sızıntıları önlemek için ayrılan tüm nesneleri serbest bırakın; kullanımdan kaldırılmış düşük düzeyli işlevlerden kaçının; FIPS uyumluluğu veya donanım hızlandırması için OpenSSL 3.0 sağlayıcılarını kullanın.
Sıkça Sorulan Sorular
“OpenSSL API'si: Temel Yapılar ve Tuzaklar” dersi ücretsiz mi?
Evet — “OpenSSL API'si: Temel Yapılar ve Tuzaklar” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Cryptology Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Cryptology Academy kursu toplamda 4 dersten oluşur.
“OpenSSL API'si: Temel Yapılar ve Tuzaklar” dersinde ne öğreneceğim?
EVP API'lerinde, BIO soyutlamalarında ve en yaygın OpenSSL API'si yanlış kullanım kalıplarında yolunuzu bulun. Cryptology Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Cryptology Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Cryptology Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“OpenSSL API'si: Temel Yapılar ve Tuzaklar” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Cryptology Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Cryptology Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- libsodium: Yanlış Kullanıma Dayanıklı Kriptoğrafi Kütüphanesi
- OpenSSL API'si: Temel Yapılar ve Tuzaklar
- Google Tink: Güvenli Üst Düzey Kriptoğrafi
- Kriptografik Bağımlılıkları Denetleme ve Seçme