Bir Delphi uygulamasından OpenSSL DLL'lerini kaldırmak eskiden bir build kararıydı. Bir derleyici define'ı açar, yeniden derler ve makinelerinde OpenSSL bulunamayan müşterilere ikinci bir çalıştırılabilir dosya gönderirdiniz. sgcWebSockets 2026.10 bunu bir çalışma zamanı kararına dönüştürüyor: başlangıçta bir kez ayarlanan tek bir global değişken, uygulama kriptografisinin OpenSSL üzerinde mi yoksa kütüphaneye gömülü, Object Pascal ile yazılmış kriptografi üzerinde mi çalışacağını belirler.
Bağlantı tarafı, yani OpenSSL olmadan TLS, OpenSSL DLL'leri Olmadan Delphi TLS 1.3 yazısında ele alınıyor. Bu yazı geri kalan her şeyle ilgili: uygulamanızın TLS handshake'i dışında yaptığı imzalar, hash'ler, anahtar anlaşması ve şifreleme.
Başlangıçta Tek Satır
sgcBase_Helpers birimi, TsgcCryptoBackend türünden global sgcCryptoBackend değişkenini bildirir:
uses
sgcBase_Helpers;
begin
sgcCryptoBackend := cbNative;
sgcCheckNativeCrypto;
Application.Initialize;
...
Anahtar bileşen başına değil globaldir, bu yüzden herhangi bir bileşen oluşturulmadan önce ayarlayın. sgcCheckNativeCrypto isteğe bağlıdır: yerel kripto birimleri derlemeye dahil değilse, uygulamanızın yapmaya çalıştığı ilk imzada değil, başlangıçta net bir mesajla hata verir.
Üç Değer
cbOpenSSLvarsayılandır. Uygulama kriptografisi, önceki sürümlerdeki gibi tam olarak OpenSSL üzerinde çalışır, bu yüzden siz değişkeni ayarlayana kadar yükseltme hiçbir şeyi değiştirmez.cbNative, uygulama kriptografisini Object Pascal uygulaması üzerinde çalıştırır. Bunun için OpenSSL hiçbir zaman yüklenmez.cbAuto, kütüphaneleri yüklenebiliyorsa OpenSSL'i, yüklenemiyorsa yerel kodu kullanır. Bu denetim bir kez çalışır ve sonuç önbelleğe alınır.
cbAuto, her iki şekilde de dağıtılan ürünler içindir. Bazı müşteriler OpenSSL kütüphanelerini çalıştırılabilir dosyanın yanına kurar, bazılarına buna izin verilmez, ve aynı build, eksik bir DLL hakkında destek talebi açılmadan her ikisi için de çalışır.
// same executable, with or without the OpenSSL libraries beside it
sgcCryptoBackend := cbAuto;
Anahtarın Etkilediği Alanlar
Anahtar, bileşenlerin sizin adınıza yaptığı kriptografiyi kapsar:
- hash ve HMAC yardımcıları;
- JWT imzalama ve doğrulama, HS, RS ve ES;
- OAuth2 ve DPoP kanıtları;
- AWS Signature V4 ve CloudFront imzalı URL'leri;
- Web Push;
- farklı arka uçlardaki eşlerin birlikte çalışabildiği uçtan uca şifreleme (E2EE), böylece
cbNativeüzerindeki bir istemci hâlâ OpenSSL üzerindeki bir sunucuyla konuşabilir; - WebAuthn ve passkey'ler;
- SAML ve XML imzaları;
- NTLM;
- AEAD, ML-KEM ve HKDF;
- QUIC paket koruması, DTLS ve WebRTC sertifikaları ve SRTP.
Bunların hiçbiri kod değişikliği gerektirmez. Dün OpenSSL ile imzalanan bir JWT, değişken öyle söylediği için bugün yerel olarak imzalanır.
Bağlantılar Ayrı Bir Ayardır
sgcCryptoBackend, bir bileşenin nasıl bağlandığını değiştirmez. Bir bağlantının TLS'i bileşen başına seçilir: TCP, HTTP ve WebSocket bileşenlerinde ve MQTT gibi bunların üzerine kurulu her şeyde IOHandler = iohNativeTLS ile, QUIC ve HTTP/3'te, ve WebRTC için DTLSOptions ile:
sgcCryptoBackend := cbNative; // application crypto
oClient.TLSOptions.IOHandler := iohNativeTLS; // this connection
OpenSSL handler'ını koruyan bir bileşen, bağlandığında yine de OpenSSL yükler. QUIC, HTTP/3 ve DTLS'te iohNativeTLS ile, anahtar ne derse desin OpenSSL hiç kullanılmaz. Hiçbir yerde OpenSSL istemeyen bir uygulama ikisini birden ayarlar: kriptografisi için anahtarı, ve güvenli bağlantı açan her bileşende handler'ı.
Define Artık İsteğe Bağlı
Şimdiye kadar OpenSSL olmadan çalışmak, SGC_NATIVE_CRYPTO derleyici define'ı anlamına geliyordu. Artık buna gerek yok. Bu define olmadan hem OpenSSL hem de yerel kod derlemeye dahil edilir ve karar çalışma zamanında değişken tarafından verilir.
Define'ın hâlâ bir kullanımı var. sgcCryptoBackend ne derse desin yerel arka ucu zorlar ve OpenSSL kodunu uygulama kripto birimlerinden çıkarır, böylece çalıştırılabilir dosya küçülür. Bir build'in OpenSSL'i asla kullanmayacağını biliyorsanız, hâlâ doğru seçim budur. Henüz bilmiyorsanız, kapalı bırakın ve başlangıçta karar verin.
Neden Önemli
- Tek build. Lisanslama, her üçüncü taraf ikili dosyayı sorgulayan bir güvenlik denetimi, veya kimsenin DLL kopyalamasına izin verilmediği kilitli makineler yüzünden OpenSSL olmadan dağıtım yapmak zorunda olan müşteriler, herkesle aynı çalıştırılabilir dosyayı alır.
- Bir geri dönüş.
cbAuto, OpenSSL kütüphaneleri eksik olduğunda, ilk imzada başarısız olmak yerine, uygulamayı çalışır durumda tutar. - Mobil. iOS ve Android'de uygulama kriptografisi için paketlenecek bir OpenSSL yoktur.
- Her yerde aynı kod. Anahtar; Windows, Linux, macOS, iOS ve Android'de, Delphi 7'den Delphi 13'e ve C++Builder ile aynı şekilde çalışır.
Yükseltme
cbOpenSSL varsayılan olduğu için, siz değişkeni ayarlayana kadar hiçbir şey değişmez. Yerel arka ucu denemek için yukarıdaki iki satırı proje dosyanıza ekleyin, testlerinizi çalıştırın ve karşılaştırın. Anahtarın kapsadığı her şeyin tam listesi, ve çalışma zamanında sıfır OpenSSL için her alanın hangi ayara ihtiyaç duyduğu, OpenSSL Olmadan Çalıştırma yardım konusunda yer alıyor.
Sırada Ne Var
- OpenSSL DLL'leri Olmadan Delphi TLS 1.3, bağlantı tarafı
Sorularınız, geri bildiriminiz veya taşıma konusunda yardıma mı ihtiyacınız var? İletişime geçin. Kodu yazan kişilerden yanıt alacaksınız.
