Destekleyen
TsgcWebSocketLoadBalancerServer
*Standard sürümden itibaren gelen sgcCrypto paketini gerektirir.
Yerel TLS motoru, sgcCrypto birimlerinin üzerine tamamen Object Pascal ile yazılmış bir TLS 1.3 ve TLS 1.2 uygulamasıdır. Bir bağlama (binding) değildir: dağıtılacak hiçbir OpenSSL DLL'i, hiçbir SChannel çağrısı ve işin içinde hiçbir platform TLS kitaplığı yoktur. Aynı kaynak kod Delphi 7'den RAD Studio 13'e kadar derlenir ve bileşenlerin desteklediği her platformda çalışır.
Ona yönelmenin nedeni anahtar değişimidir. Motor, RFC 10024'ün hibrit kuantum sonrası gruplarını sunar ve X25519MLKEM768 önerdiği ilk gruptur, böylece ona geçen bir istemci, uygulamada başka hiçbir değişiklik olmadan, bunu destekleyen herhangi bir sunucuya karşı kuantum sonrası bir anahtar değişimi müzakere eder. Hibrit gruplar yalnızca TLS 1.3'te bulunur, bu yüzden TLS 1.2'ye geri dönen bir bağlantı klasik bir eğri kullanır. Bu grupların ne olduğu ve bugün neden bir hibritin makul geçiş yolu olduğu için bkz. Kuantum Sonrası Kriptografi.
Etkinleştirme
IOHandler'ı ayarlayın, başka hiçbir şey değişmez. Zaten kullandığınız sertifika, anahtar, kök sertifika, doğrulama ve ALPN özellikleri çalışmaya devam eder, motor da aynılarını okur.
// client
oClient := TsgcWebSocketClient.Create(nil);
oClient.URL := 'wss://www.esegece.com:2053';
oClient.TLS := True;
oClient.TLSOptions.IOHandler := iohNativeTLS;
oClient.TLSOptions.VerifyCertificate := True;
oClient.TLSOptions.RootCertFile := 'cacert.pem';
oClient.Active := True;
// server
oServer := TsgcWebSocketServer.Create(nil);
oServer.SSL := True;
oServer.SSLOptions.IOHandler := iohNativeTLS;
oServer.SSLOptions.CertFile := 'certificate.pem';
oServer.SSLOptions.KeyFile := 'key.pem';
oServer.Active := True;
Bir sunucuda motor, olay güdümlü motorlar üzerinde de çalışır. Windows'ta IOHandlerOptions.IOHandlerType değerini iohIOCP olarak veya Linux'ta iohEPOLL olarak ayarlayın, işleyici eşleşen TLS Sağlayıcısı üzerine kurulur, böylece aynı yapılandırma her üç motorda da çalışır.
sgcCrypto paketi olmayan bir yapıda iohNativeTLS seçmek, sessizce başka bir kitaplığa düşmek yerine bunu söyleyen bir hata verir.
TLS sürümleri
Motor, Indy istemcisinde, Indy sunucusunda ve IOCP ile EPOLL sunucu motorlarında, hem istemci hem sunucu olarak TLS 1.3 ve TLS 1.2 konuşur. Her iki taraf da destekliyorsa TLS 1.3 her zaman seçilir. Yerel motor için, bir istemcide TLSOptions.Version ve bir sunucuda SSLOptions.Version, izin verilen en düşük sürümdür.
| Sürüm | Müzakere edilen |
| tlsUndefined (varsayılan) | TLS 1.3 veya TLS 1.2 |
| tls1_2 | TLS 1.3 veya TLS 1.2 |
| tls1_3 | Yalnızca TLS 1.3 |
| tls1_0, tls1_1 | Hiçbir şey. Motor yalnızca TLS 1.2 ve TLS 1.3'ü desteklediği için bir istemci bağlanırken, bir sunucu da başlarken bir yapılandırma hatası verir. |
Bu, OpenSSL işleyicisinin özelliği okuma biçiminden farklıdır. iohOpenSSL ile tls1_2 tam olarak TLS 1.2 anlamına gelir, iohNativeTLS ile ise TLS 1.2 veya sonrası anlamına gelir. Geri kalanına şifre paketi listesi karar verir. Yalnızca TLS 1.2 elde etmek için Version değerini tls1_2'de bırakın ve NativeTLS_Options.CipherSuites içinde yalnızca TLS 1.2 paketlerini belirtin. Yalnızca TLS 1.3 paketlerini belirten bir liste yalnızca TLS 1.3 verir, iki sürümün paketlerini de belirten bir liste ise ikisine de izin verir. Version değeri tls1_3 iken TLS 1.2 paketlerinden oluşan bir liste, müzakere edilecek hiçbir sürüm bırakmaz ve bağlantı başladığında hata verir.
// TLS 1.3 and TLS 1.2, tls1_2 is the lowest version allowed
oClient.TLSOptions.IOHandler := iohNativeTLS;
oClient.TLSOptions.Version := tls1_2;
// TLS 1.3 only
oClient.TLSOptions.Version := tls1_3;
// TLS 1.2 only: name TLS 1.2 suites and no TLS 1.3 suite
oClient.TLSOptions.Version := tls1_2;
oClient.TLSOptions.NativeTLS_Options.CipherSuites :=
'TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256';
Gruplar ve şifre paketleri
Bir istemcide TLSOptions.NativeTLS_Options ve bir sunucuda SSLOptions.NativeTLS_Options, iki tercih listesini taşır. İkisi de OpenSSL biçiminde dizelerdir, öğeler iki nokta üst üste ile ayrılır, en çok tercih edilen başta olur, ve tek bir liste TLS 1.3 ile TLS 1.2'ye birlikte hizmet eder. Motorun varsayılanını korumak için birini boş bırakın. Geçersiz bir liste, bağlantı başladığında hata verir, böylece bir yazım hatası sessizce göz ardı edilmez.
| Özellik | Kabul edilen adlar | Varsayılan |
| Groups | X25519MLKEM768, SecP256r1MLKEM768, SecP384r1MLKEM1024, X25519, secp256r1, secp384r1. P-256, prime256v1 ve P-384 takma adları da kabul edilir ve adlar büyük küçük harf ayrımı gözetilmeden karşılaştırılır. Üç hibrit grup yalnızca TLS 1.3'te bulunur. | X25519MLKEM768:X25519:secp256r1:secp384r1 |
| CipherSuites | TLS 1.3: TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256, TLS_AES_128_GCM_SHA256. TLS 1.2: aşağıdaki tablodaki paketler. Hem IANA adları hem de ECDHE-RSA-AES128-GCM-SHA256 gibi OpenSSL biçimi adlar kabul edilir, ve motor IANA adını bildirir. | TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256, artı aşağıdaki TLS 1.2 varsayılanları |
Listedeki ilk grup, bir istemcinin anahtar paylaşımı gönderdiği gruptur, bu yüzden X25519MLKEM768 değerini başta bırakmak, ilk uçuşu zaten kuantum sonrası yapan şeydir. Bir öğenin önüne soru işareti koymak, bu yapıda o öğe yoksa onu atlar; bilinmeyen veya kullanılamayan başka herhangi bir öğe ise listenin tamamını başarısız kılar.
// only the hybrid post-quantum groups, and only AES-256-GCM
oClient.TLSOptions.NativeTLS_Options.Groups :=
'X25519MLKEM768:SecP256r1MLKEM768:SecP384r1MLKEM1024';
oClient.TLSOptions.NativeTLS_Options.CipherSuites := 'TLS_AES_256_GCM_SHA384';
// tolerate a build where X25519 is not compiled in
oClient.TLSOptions.NativeTLS_Options.Groups := '?X25519MLKEM768:secp256r1';
TLS 1.2 şifre paketleri
Varsayılan olarak yalnızca ileri gizlilik sağlayan AEAD paketleri etkindir. AES-CBC paketleri ve RSA anahtar değişimi, daha iyisini yapamayan eşler içindir ve yalnızca CipherSuites onları belirttiğinde sunulur veya kabul edilir.
| Paketler | Etkin |
| TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 | Varsayılan olarak, bu sırayla. |
| TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 | Yalnızca CipherSuites içinde belirtildiğinde. |
| TLS_RSA_WITH_AES_128_GCM_SHA256, TLS_RSA_WITH_AES_256_GCM_SHA384, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA256 | Yalnızca CipherSuites içinde belirtildiğinde. RSA anahtar değişiminde ileri gizlilik yoktur. |
Bir TLS 1.2 bağlantısının ECDHE paketleri, Groups listesinden klasik bir grup kullanır: X25519, secp256r1 veya secp384r1, bu yüzden TLS 1.2 eşlerinin bağlanabilmesi gerekiyorsa bunlardan en az birini listede tutun. RSA anahtar değişimi hiçbir grup kullanmaz.
// TLS 1.3, and TLS 1.2 with AES-GCM plus AES-CBC for older clients
oServer.SSLOptions.IOHandler := iohNativeTLS;
oServer.SSLOptions.Version := tls1_2;
oServer.SSLOptions.NativeTLS_Options.CipherSuites :=
'TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256:' +
'TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256:' +
'TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256:TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA';
SGC_CRYPTO_FIPS ile yapılmış bir derlemede X25519 üzerine kurulu iki grup, ChaCha20-Poly1305 paketleri ve RSA anahtar değişimi derleme dışı bırakılır, ve varsayılanlar SecP256r1MLKEM768:SecP384r1MLKEM1024:secp256r1:secp384r1 ve TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256 olarak değişir, TLS 1.2 için dört ECDHE AES-GCM paketiyle birlikte. Bkz. FIPS Modu.
TLS 1.2 davranışı
TLS 1.2, modern bir eşin beklediği korumalarla ve bilinen saldırılarına yol açan protokol kısımları olmadan uygulanmıştır.
Genişletilmiş ana sır (extended master secret). RFC 7627 bir istemci tarafından sunulur ve bir sunucu tarafından kabul edilir. Bunu desteklemeyen bir eş yine de kabul edilir.
Yeniden müzakere yok. Bir yeniden müzakere isteği no_renegotiation uyarısıyla reddedilir. Oturum sürdürme, oturum biletlerini kullanır ve genişletilmiş ana sırrı gerektirir, aşağıdaki Oturum sürdürme bölümüne bakın.
SHA-1 imzası yok. RFC 9155'i izleyerek, SHA-1 imzaları ne gönderilir ne de kabul edilir. signature_algorithms uzantısı olmayan bir TLS 1.2 ClientHello reddedilir, çünkü bu yalnızca SHA-1 anlamına gelir.
Düşürme koruması (downgrade). RFC 8446 bölüm 4.1.3'ün düşürme koruması her iki tarafta da çalışır. TLS 1.3'e de izin veren bir sunucu her TLS 1.2 yanıtını işaretler, ve TLS 1.3 sunmuş bir istemci bu işareti taşıyan bir TLS 1.2 yanıtını reddeder.
Sabit zamanlı CBC. CBC kayıtları sabit zamanda çözülür, bu da Lucky Thirteen'i kapatır, ve RSA anahtar değişimi RFC 5246 bölüm 7.4.7.1'in karşı önlemini uygular.
Sertifika anahtar kullanımı. RSA anahtar değişimi için sunucu sertifikasının keyEncipherment anahtar kullanımına sahip olması gerekir. ECDHE paketleri ve TLS 1.3, digitalSignature gerektirir.
Yalnızca TLS 1.3 özellikleri. KeyUpdate ve anahtar malzemesi dışa aktarma yalnızca bir TLS 1.3 oturumunda bulunur.
Oturum sürdürme
Motor, TLS 1.3'te (RFC 8446) ve TLS 1.2'de (RFC 5077) durumsuz oturum biletleriyle oturumları sürdürür. Tam bir el sıkışmadan sonra sunucu, yalnızca sunucunun sahip olduğu bir anahtar altında AES-256-GCM ile mühürlenmiş bir bilet gönderir. İstemci bunu, ana bilgisayar, bağlantı noktası ve ALPN listesiyle anahtarlanan bir oturum önbelleğinde tutar ve bir sonraki bağlantıda sunar, bu da sertifika alışverişini atlar. Sunucunun açamadığı veya süresi dolmuş bir bilet, yeni bir biletle tam bir el sıkışma verir.
| Özellik | Varsayılan | Anlamı |
| NativeTLS_Options.SessionTickets | True | Bir sunucu bilet verir ve bir istemci bunları saklayıp sunar. False, sürdürmeyi kapatır, o zaman her el sıkışma tam bir el sıkışma olur. |
| NativeTLS_Options.TicketLifetime | 7200 | Yalnızca sunucu. Bir biletin sürdürmek için kullanılabileceği saniye sayısı, en fazla 604800. Sunucu bilet anahtarı her TicketLifetime saniyede bir döner, ve önceki anahtar bir dönem daha geçerli kalır. |
Seçenekler, bir istemcide TLSOptions.NativeTLS_Options ve bir sunucuda SSLOptions.NativeTLS_Options'tür. Oturum önbelleği her istemci bileşenine aittir, bu yüzden aynı TsgcWebSocketClient, TsgcHTTP1Client, TsgcTCPClient veya TsgcLDAPClient'ın yeniden bağlanmaları sürdürülür, ve TsgcWebSocketProxyServer'ın yukarı akış bağlantısı da öyle.
TLS 1.2 sürdürme, RFC 7627'nin genişletilmiş ana sırrını gerektirir. Bu olmadan bir TLS 1.2 oturumu hiçbir zaman sürdürülmez ve bilet almaz, ve sunucu bir istemci sertifikası istediğinde de bilet verilmez. Bir TLS 1.3 bileti hiçbir zaman bir TLS 1.2 oturumu olarak açılmaz, ve tam tersi de olmaz.
Bir bağlantının sürdürülüp sürdürülmediği, aşağıda açıklanan işleyici olan TsgcIdSSLIOHandlerSocketNativeTLS'in Resumed özelliği ile bildirilir.
Ne müzakere edildi
El sıkışma tamamlandığında, sgcSSL_NativeTLS_Indy biriminde bulunan istemci işleyicisi TsgcIdSSLIOHandlerSocketNativeTLS, sonucu bildirir. VersionName, TLSv1.2 veya TLSv1.3'tür, CipherSuiteName, paketin IANA adıdır, GroupName, anahtar değişim grubudur, RSA anahtar değişiminde boştur, ve PeerSignatureSchemeName, sunucunun kullandığı imza şemasıdır. İşleyici, istemcinin OnSSLAfterCreateHandler'a geçirdiği işleyicidir.
procedure TForm1.oClientSSLAfterCreateHandler(Sender: TObject;
aType: TwsSSLHandler; aSSLHandler: TIdSSLIOHandlerSocketBase);
begin
FHandler := aSSLHandler;
end;
procedure TForm1.oClientConnect(Connection: TsgcWSConnection);
var
oHandler: TsgcIdSSLIOHandlerSocketNativeTLS;
begin
if FHandler is TsgcIdSSLIOHandlerSocketNativeTLS then
begin
oHandler := TsgcIdSSLIOHandlerSocketNativeTLS(FHandler);
Memo1.Lines.Add(oHandler.VersionName + ' ' + oHandler.CipherSuiteName +
' ' + oHandler.GroupName + ' ' + oHandler.PeerSignatureSchemeName);
end;
end;
Sertifikalar ve doğrulama
Bir sunucu, CertFile, KeyFile ve Password değerlerini okur. CertFile ve KeyFile PEM olabilir, ya da CertFile, uzantısından tanınan bir .pfx veya .p12 dosyası olabilir. Bir PKCS#12 dosyası sertifikayı, zinciri ve özel anahtarı taşır, bu yüzden KeyFile gerekmez, ve Password ile açılır. sgcCrypto_PKCS12'nin saf Pascal PKCS#12 okuyucusuyla, hiç OpenSSL olmadan okunur. VerifyCertificate değerini True yapan bir istemci, sunucu zincirini aşağıda açıklanan güvenilir köklere karşı denetler ve adın bağlandığı ana bilgisayarla eşleştiğini denetler. VerifyDepth aktarılır, ve 16'dan büyük bir değer 16'ya çekilir.
Güvenilir kökler, RootCertFile içindeki sertifikalardır. NativeTLS_Options.UseSystemRoots değerini True yapmak, işletim sisteminin güvendiği sertifika yetkililerini ekler. Varsayılan olarak False'tur. İkisi birleşir: önce RootCertFile'ın kökleri yüklenir, sistem kökleri aynı depoya eklenir, ve bir zincir bunlardan herhangi birine ulaştığında kabul edilir. Hiçbir sistem kökü bulunamadığında hiçbir şey eklenmez ve hiçbir hata verilmez, böylece doğrulama yalnızca RootCertFile'a dayanır. Özellik, bir istemcide TLSOptions.NativeTLS_Options.UseSystemRoots ve bir sunucuda SSLOptions.NativeTLS_Options.UseSystemRoots'tür; sunucuda kökler yalnızca istemci sertifikalarını doğrulamaya hizmet eder. Sistem köklerinin nereden geldiği platforma bağlıdır:
Windows. crypt32.dll üzerinden okunan ROOT sistem deposu, Trusted Root Certification Authorities.
macOS. Security.framework'ün çapa sertifikaları, yedek olarak /etc/ssl/cert.pem ile.
iOS. Sistem kökleri listelenemez. Hiçbir kök yüklenmediğinde, motorun yalnızca kökü güvenilir olmadığı için reddettiği bir zincir, SSL ilkesi ve ana bilgisayar adıyla Security.framework tarafından değerlendirilir. Motorun anahtar kullanımı ve ana bilgisayar adı denetimleri bundan sonra da çalışmaya devam eder.
Android. /apex/com.android.conscrypt/cacerts (Android 14 ve sonrası) veya /system/etc/security/cacerts içindeki, PEM veya DER, sertifika dosyaları. Kullanıcının devre dışı bıraktığı ve /data/misc/user/0/cacerts-removed içinde listelenen kökler atlanır, ve uygulama bu klasörleri okuyabildiğinde /data/misc/user/0/cacerts-added içindeki kullanıcı kökleri eklenir.
Linux ve diğer platformlar. Var olan ve en az bir sertifika içeren şu dosyalardan ilki: /etc/ssl/certs/ca-certificates.crt, /etc/pki/tls/certs/ca-bundle.crt, /etc/ssl/ca-bundle.pem, /etc/pki/tls/cacert.pem, /etc/ssl/cert.pem ve /etc/ssl/certs/ca-bundle.crt.
Bir sertifika dosyaları klasörünü kendiniz yüklemek için, sgcSSL_NativeTLS_Certificates biriminde bulunan TsgcTLS13TrustStore.AddDirectory(aDirectory, aRemovedDirectory), aDirectory'deki her PEM veya DER dosyasını okur, adı aRemovedDirectory içinde de bulunan her dosyayı atlar, ve kaç sertifika eklediğini döndürür. Her platformda çalışır.
Bağlantı ana bilgisayarını kullanmak yerine sertifikanın taşıması gereken adı sabitlemek için, X509Checks.Mode içindeki eşleşen bayrakla birlikte TLSOptions.OpenSSL_Options.X509Checks.HostName veya IPAddress değerini ayarlayın. Motor, OpenSSL olmamasına rağmen bu iki değeri okur, böylece özellik, hangi IOHandler seçilmiş olursa olsun aynı anlama gelir.
Bir sunucuda SSLOptions.VerifyCertificate, istemciden bir sertifika ister ve onu yukarıda açıklanan güvenilir köklere karşı doğrular, ve SSLOptions.VerifyCertificate_Options.FailIfNoCertificate, hiç sertifika göndermeyen bir istemciyi reddeder. VerifyClientOnce burada bir işe yaramaz. TLS 1.3'te yeniden müzakere yoktur ve motor bunu TLS 1.2'de reddeder, bu yüzden ikinci kez hiç sormaz.
ALPN her zamanki gibi, bir istemcide ALPNProtocols aracılığıyla ve sunucu ALPN seçimi aracılığıyla çalışır, böylece yerel motor üzerinden HTTP/2, h2 değerini OpenSSL üzerinden yaptığı gibi müzakere eder. Bkz. ALPN.
QUIC modu
Motor ayrıca QUIC ve HTTP/3'ün TLS 1.3 el sıkışmasını da yürütür (RFC 9001). TsgcQUICClient üzerinde SSLQUICOptions.IOHandler'ı, TsgcHTTP3Client üzerinde TLSOptions.IOHandler'ı, TsgcQUICServer ve TsgcHTTP3Server üzerinde QUICOptions.SSLOptions.IOHandler'ı, veya HTTP3Options.Enabled ile bir sunucuda SSLOptions.IOHandler'ı iohNativeTLS olarak ayarlayın.
sgc QUIC motoru, OpenSSL'in dışa aktardıklarından bağımsız olarak her zaman kullanılır. Bir sunucuda QUICMode, qmCustom bildirir.
El sıkışma, QUIC aktarım parametrelerini taşır, ALPN gerektirir ve TLS uyarılarını QUIC hata kodları olarak bildirir. Sunucu sertifikası PEM veya PFX'ten okunur, ve eş, ana bilgisayar adı dahil, RootCertFile'a veya sistem köklerine karşı doğrulanır.
Oturum biletleri, sürdürme ve 0-RTT, OpenSSL'deki gibi çalışır. Sunucu, el sıkışmadan sonra bir bilet gönderir, istemci onu ALPN ve sunucu aktarım parametreleriyle birlikte saklar, ve 0-RTT bilet başına yalnızca bir kez kabul edilir. QUIC biletleri hiçbir zaman TCP üzerinden TLS'e geçmez.
Paket koruması da yereldir, bu yüzden QUIC ve HTTP/3 hiç OpenSSL yüklemez. Hiçbir tanım gerekmez.
Motor karşılaştırması için bkz. QUIC.
Yapmadıkları
Motor bilinçli olarak dardır. Aşağıdaki her şey gerçek bir sınırdır, aranacak bir ayar değildir.
Yalnızca TLS 1.3 ve TLS 1.2. SSL yoktur, TLS 1.0 yoktur ve TLS 1.1 yoktur. Version değeri tls1_0 veya tls1_1 olduğunda bir istemci bağlanırken, bir sunucu da başlarken hata verir. Ne TLS 1.3 ne de TLS 1.2 yapabilen bir eş bağlanamaz.
Biletsiz PSK yok. Sürdürme yalnızca motorun kendisinin verdiği oturum biletleriyle çalışır, yukarıdaki Oturum sürdürme bölümüne bakın. Harici önceden paylaşılan anahtarlar desteklenmez.
TCP üzerinde 0-RTT yok. TCP üzerinden bir TLS bağlantısında erken veri ne gönderilir ne de kabul edilir. El sıkışma sonrası istemci kimlik doğrulaması da uygulanmamıştır.
QUIC kendi modu aracılığıyla. QUIC ve HTTP/3, o bileşenler üzerinde yapılandırılan, yukarıda açıklanan QUIC modunu kullanır.
Varsayılan olarak sistem kökü yok. NativeTLS_Options.UseSystemRoots True olmadıkça, güven kökleri yalnızca RootCertFile'dan gelir ve başka hiçbir yerden gelmez, bu yüzden sertifika doğrulayan bir istemci bir kök dosyasını dağıtmalı ya da bir kök dosyasını göstermelidir. Çalışan bir OpenSSL veya SChannel yapılandırmasının fark etmesi en olası tek davranış farkı budur.
OnSSLVerifyPeer tetiklenmez. O olay OpenSSL işleyicisine aittir. Yerel motorun kendi doğrulama kancaları vardır; bunlar derinlik başına tek sertifika yerine tüm eş zincirini ve motorun kararını tek seferde alır, bu yüzden güven kararını geçersiz kılan bir uygulama, bileşen olayı yerine bunları kullanmak zorundadır.
Eşin gönderdiği hiçbir şey bir hata oluşturmaz. Bir protokol hatası, bağlantıyı uygun TLS uyarısıyla sonlandırır ve neden, her zamanki gibi bileşen hata olayları aracılığıyla bildirilir.
AES-GCM ve AES-CBC kayıt koruması, CPU'da bulunduklarında, Delphi ile yapılmış Windows derlemelerinde AES-NI ve PCLMULQDQ komutlarını kullanır, bkz. Simetrik Şifreleme içindeki sgcAES_HardwareAvailable. Kitaplığın hiçbir parçasının OpenSSL yüklemediği bir derleme için, bkz. OpenSSL Olmadan Çalıştırma.