TsgcWebSocketHTTPServer › Özellikler › SSLOptions
TLS dinleyicisi için sertifika yollarını, TLS sürüm seçimini ve OpenSSL ayarlamasını tutar.
property SSLOptions: TsgcWSSSL_Options read FSSLOptions write SetSSLOptions;
Version=tlsUndefined, VerifyCertificate=False
SSL True olduğunda sunucuyu etkinleştirmeden önce sertifika materyalini sağlayın: RootCertFile, CertFile ve KeyFile, PEM dosyalarını işaret eder (dosya tam zinciri içerdiğinde üçü için de aynı yolu kullanın) ve Password yalnızca özel anahtar şifrelenmişse gereklidir. Password, HTTP3Options aracılığıyla etkinleştirilen HTTP/3 dinleyicisi tarafından da okunur; bu nedenle aynı şifreli anahtar dosyası her iki dinleyiciye de hizmet eder. İstemci sertifikalarını istemek ve doğrulamak için VerifyCertificate öğesini True olarak ayarlayın (alt seçenekler FailIfNoCertificate ve VerifyClientOnce denetimi inceler) ve VerifyDepth zincir uzunluğunu kontrol eder. Version, belirli bir TLS sürümünü seçer (tls1_0, tls1_1, tls1_2, tls1_3) veya müzakereyi açık bırakır (tlsUndefined). iohNativeTLS ile bu, izin verilen en düşük sürümdür, aşağıya bakın. OpenSSL_Options düşük seviyeli ayarları sunar: APIVersion (oslAPI_1_0/oslAPI_1_1/oslAPI_3_0), OpenSSL ikili dosyalarını bulmak için LibPath/LibPathCustom, UnixSymLinks, ECDHE, CipherList, CurveList, VersionMin ve hostname/IP doğrulaması için X509Checks.
IOHandler, TLS motorunu seçer. iohOpenSSL varsayılandır ve iohSChannel Windows sağlayıcısını kullanır. iohNativeTLS, sgcCrypto paketinin TLS 1.3 ve TLS 1.2 konuşan saf Object Pascal TLS motorunu seçer: hiçbir OpenSSL kütüphanesi yüklenmez ve TLS 1.3'te RFC 10024'ün hibrit kuantum sonrası anahtar değişimi grupları, ilk sırada X25519MLKEM768 olacak şekilde sunulur. İki tercih listesi NativeTLS_Options.Groups ve NativeTLS_Options.CipherSuites'tir; OpenSSL biçiminde iki nokta üst üste ile ayrılırlar ve boş bir liste motorun varsayılanlarını korur. Motor, klasik bağlantı başına iş parçacığı motorunda ve IOCP ile EPOLL motorlarında aynı şekilde çalışır. iohAppleTLS ve iohAndroidTLS yalnızca istemci içindir: OnSSLGetHandler kendi işleyicisini sağlamadıkça, bunlardan biriyle bir sunucuda Active True yapıldığında bir istisna oluşur. Bunun yerine iohNativeTLS, iohOpenSSL veya, Windows'ta, iohSChannel kullanın.
Yerel motor için Version, iohOpenSSL'de olduğu gibi kesin bir sürüm değil, izin verilen en düşük sürümdür. tlsUndefined (varsayılan) ve tls1_2, TLS 1.3 ve TLS 1.2'yi kabul eder, tls1_3 yalnızca TLS 1.3'ü kabul eder, ve tls1_0 veya tls1_1, sunucu başlatıldığında bir yapılandırma hatası verir, çünkü motor yalnızca TLS 1.2 ve TLS 1.3'ü destekler. Yalnızca TLS 1.2'yi kabul etmek için, NativeTLS_Options.CipherSuites içinde yalnızca TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 gibi TLS 1.2 şifre paketlerini belirtin. Motor, istemci sertifikalarını RootCertFile içindeki köklere karşı doğrular; NativeTLS_Options.UseSystemRoots True olduğunda (varsayılan False'tur) işletim sisteminin güvendiği kökler de eklenir. iohNativeTLS ile CertFile, sertifikayı, zinciri ve anahtarı taşıyan bir .pfx veya .p12 dosyası da olabilir, Password ile açılır. Motor, oturumları TLS 1.3 ve TLS 1.2 oturum biletleriyle sürdürür: NativeTLS_Options.SessionTickets (varsayılan True) bunu açar ve NativeTLS_Options.TicketLifetime (varsayılan 7200 saniye) bir biletin ne kadar süre kullanılabileceğini belirler. TLS 1.2 sürdürmesi, istemcinin genişletilmiş ana sırrı desteklemesini gerektirir. 0-RTT kabul etmez ve OpenSSL işleyicisine ait olan OnSSLVerifyPeer olayını tetiklemez. VerifyCertificate istemciden bir sertifika ister ve onu doğrular, VerifyCertificate_Options.FailIfNoCertificate hiç sertifika göndermeyen bir istemciyi reddeder, ve VerifyClientOnce hiçbir etki yapmaz çünkü motor asla yeniden müzakere etmez. Bkz. Native TLS.
AllowPlainText (varsayılan olarak False), TLS dinleyicisinin aynı portta düz HTTP ve WebSocket bağlantılarını da kabul etmesini sağlar. Sunucu, her yeni bağlantının ilk baytına bakar: $16 (TLS el sıkışma kaydı) TLS anlamına gelir, diğer her şey düz metin olarak işlenir ve PlainTextTimeout (milisaniye, varsayılan olarak 5000) süresi içinde hiçbir bayt gelmezse bağlantı TLS olarak değerlendirilir. PlainTextPolicy, düz bir bağlantıya ne olacağını belirler: ptpServe (varsayılan) isteği normal şekilde sunar, ptpRedirect yöntemi ve gövdeyi koruyarak https://<Host><path> adresine 308 Permanent Redirect yanıtı verir (istekte Host başlığı yoksa 400 Bad Request) ve ptpReject 400 Bad Request yanıtı verip bağlantıyı kapatır. TsgcWSConnectionServer sınıfının TLS bağlantı özelliği, bir bağlantının TLS kullanıp kullanmadığını bildirir. Bu seçenekler varsayılan Indy IOHandler ile ve IOCP ve EPOLL IOHandler'larıyla çalışır. OnCommandGet içinde, IsTLS(AContext) sunucu yöntemi isteğin TLS kullanıp kullanmadığını bildirir. Bkz. TLS ve Aynı Portta Düz HTTP.
oServer := TsgcWebSocketHTTPServer.Create(nil);
oServer.SSL := true;
oServer.SSLOptions.CertFile := 'c:\certificates\mycert.pem';
oServer.SSLOptions.KeyFile := 'c:\certificates\mycert.pem';
oServer.SSLOptions.RootCertFile := 'c:\certificates\mycert.pem';
oServer.SSLOptions.Version := tls1_3;
oServer.SSLOptions.OpenSSL_Options.VersionMin := tls1_2;
oServer.SSLOptions.Port := 443;
oServer.Active := true;