OpenSSL Olmadan Çalıştırma

sgcWebSockets, hiç OpenSSL kütüphanesi olmadan çalışabilir. Bunu mümkün kılan iki bağımsız ayar vardır ve her ikisi de Standard sürümünden itibaren gelen, saf Pascal sgcCrypto birimleri üzerine kuruludur.

Ne bağlantıları için ne de diğer kriptografi kullanımları için OpenSSL'e ihtiyaç duymayan bir uygulama her ikisini birden kullanır.

1. Çalışma zamanı anahtarı: sgcCryptoBackend

sgcBase_Helpers birimi, TsgcCryptoBackend türünden genel sgcCryptoBackend değişkenini bildirir:

Anahtar bileşen başına değil, geneldir. Herhangi bir bileşen oluşturulmadan önce, başlangıçta bir kez ayarlayın. sgcUseNativeCrypto, yerel backend kullanımdayken True döndürür. Yerel backend, sgcCrypto birimlerinin derlemeye dahil edilmesini (SGC_CRYPTO) gerektirir. Bunlar olmadan cbNative, "Native crypto not available, sgcCrypto units are not compiled in" özel durumunu verir. Bu hatayı ilk kullanımda değil başlangıçta almak için sgcCheckNativeCrypto'yu çağırın.

uses
  sgcBase_Helpers;

begin
  sgcCryptoBackend := cbNative;
  sgcCheckNativeCrypto;
  Application.Initialize;
  ...

Şu bölümler anahtarı izler:

Alan Yerel olarak ne çalışır
Hash ve HMAC yardımcıları sgcBase_Helpers'ın hash ve HMAC işlevleri, ve sgcEncryptString / sgcDecryptString.
JWT, JWS imzaları HMAC, RSA, RSA-PSS, ECDSA ve EdDSA imzalama ve doğrulama (sgcSSL_RSA, sgcSSL_PS, sgcSSL_ES, sgcSSL_ED). sgcES_GetCurveFromPublicKey yalnızca bir OpenSSL anahtarında çalışır ve yerel backend'de hata verir.
Sertifikalar sgcSSL yardımcıları: PEM ve DER dönüşümü, sertifika yükleme, CRL URI'si ve sertifika zinciri doğrulaması.
OAuth2 ve DPoP OAuth2 JWK yardımcısı, ve OAuth2 sunucusunun DPoP proof denetimi (ES256, ES384, ES512, RS256, RS384, RS512). Bkz. DPoP.
Amazon AWS Signature V4, CloudFront imzalı URL'si, ve Amazon IoT MQTT istemcisi'nin Signature V4 kimlik doğrulaması; bu durumda SignatureV4.OpenSSL_Options göz ardı edilir.
Web Push VAPID ES256 belirteci, ECDH anahtar anlaşması, HKDF ve AES-128-GCM yük şifrelemesi. Yalnızca push servisine yapılan bir https bağlantısı, kendi IOHandler'ı aracılığıyla bir TLS kitaplığı yükler.
E2EE Anahtar anlaşması, AES-GCM ve rastgele sayı üretici. Genel anahtarlar her iki backend'de de PEM olarak iletilir, ham anahtarlar da hâlâ kabul edilir; böylece farklı backend'lerdeki eşler birlikte çalışabilir.
WebAuthn, SAML, OIDC WebAuthn sertifikası, COSE anahtarı ve attestation denetimleri, ve SAML ile OIDC tarafından kullanılan XMLDSig imza denetimi.
NTLM NTLM kimlik doğrulamasının MD4 ve DES kodu. Her yapıda yereldir ve artık hiçbir tanıma ihtiyaç duymaz.
AEAD, KEM, HKDF sgcSSL_AEAD (AES-128-GCM, AES-256-GCM, ChaCha20-Poly1305), sgcSSL_KEM (ML-KEM-768 ve ECDH P-256) ve sgcSSL_HKDF (artık sgcHKDF_MD_SHA384 ile de). ML-KEM-768, OpenSSL 3.5'e ihtiyaç duymaz ve anahtarlar OpenSSL 3.5 ile aynı kodlamaları kullanır. Bir FIPS yapısında ChaCha20-Poly1305 kullanılamaz ve hata verir.
QUIC, DTLS, SRTP QUIC paket koruması, DTLS sertifikası ve SRTP. iohNativeTLS ile bunlar, anahtar ne derse desin, bağlantı başına zaten yereldir.

sgcCryptoBackend, bir bileşenin TLS bağlantısını değiştirmez. IOHandler = iohOpenSSL olarak kalan bir bileşen, bağlandığında yine OpenSSL yükler.

2. İsteğe bağlı tanım: SGC_NATIVE_CRYPTO

Tanım varsayılan olarak kapalıdır ve OpenSSL olmadan çalışmak için artık gerekli değildir. Tanım olmadan hem OpenSSL hem de yerel kod derlenir ve sgcCryptoBackend çalışma zamanında karar verir. Tanımla birlikte, sgcCryptoBackend ne derse desin yerel backend zorlanır ve OpenSSL kodu uygulama kriptografisi birimlerinden çıkarılır; bu da çalıştırılabilir dosyayı küçültür. Etkinleştirmek için sgcVer.inc'i açın ve şu satırdaki noktayı kaldırın

{.$DEFINE SGC_NATIVE_CRYPTO}

veya projenizin koşullu tanımlarına SGC_NATIVE_CRYPTO ekleyin. SGC_NATIVE_CRYPTO ayrıca ihtiyaç duyduğu sgcCrypto birimleri için SGC_CRYPTO'yu da açar. DISABLE_SGC_NATIVE_CRYPTO onu yeniden kapatır.

3. Çalışma zamanında sıfır OpenSSL

Hangi ayarlara ihtiyaç duyduğunuz, uygulamanın ne kullandığına bağlıdır:

Alan OpenSSL olmadan çalışmak için ayarlar
TCP üzerinden TLS: WebSocket, HTTP/1, HTTP/2, TCP, MQTT ve diğer protokoller TLSOptions.IOHandler (istemci) veya SSLOptions.IOHandler (sunucu) = iohNativeTLS. Bkz. Native TLS.
QUIC ve HTTP/3 IOHandler = iohNativeTLS. El sıkışma, paket koruması, anahtar güncellemesi ve Retry etiketi, hepsi yereldir. Bkz. QUIC ve HTTP/3.
DTLS ve WebRTC DTLSOptions.IOHandler = iohNativeTLS. El sıkışma, DTLS sertifikası ve SRTP anahtarları yereldir. Bkz. DTLSOptions ve WebRTC DTLS.
Uygulama kriptografisi: JWT, OAuth2, Web Push, Amazon Signature V4, E2EE, WebAuthn, SAML ve ilk tablonun diğer alanları Başlangıçta sgcCryptoBackend := cbNative, veya SGC_NATIVE_CRYPTO tanımı.

iohNativeTLS satırları hiçbir tanım ve hiçbir sgcCryptoBackend ayarı gerektirmez. sgcCrypto birimleri olmayan bir yapıda iohNativeTLS seçmek özel durum oluşturur; sessizce OpenSSL'e geri dönmez.

iohNativeTLS

iohNativeTLS ile TLS 1.3 ve TLS 1.2 el sıkışması ile kayıt katmanı, yerel motor üzerinde çalışır. WebSocket, HTTP/1, HTTP/2 ve TCP istemcileri ile sunucuları için ve bunların üzerine kurulan her şey için çalışır: MQTT, AMQP, STOMP ve diğer protokoller, API bileşenleri, IoT istemcileri (Certificate.IOHandler), proxy sunucusunun yukarı akış bağlantısı (Proxy.TLSOptions) ve LDAP istemcisi. Sertifika PEM, DER veya bir .pfx / .p12 dosyası olabilir.