TsgcWebSocketServer › Özellikler › SSLOptions

SSLOptions Özellik

TLS dinleyicisi için sertifika yollarını, TLS sürüm seçimini ve OpenSSL ayarlamasını tutar.

Sözdizimi

property SSLOptions: TsgcWSSSL_Options read FSSLOptions write SetSSLOptions;

Varsayılan Değer

Version=tlsUndefined, VerifyCertificate=False

Remarks

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. İ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.

VerifyCertificate, istemci sertifikasının düzenlendiğinden bu yana iptal edilip edilmediği hakkında hiçbir şey söylemez; bu nedenle anahtarı çalınmış ve seri numarası o zamandan beri iptal edilmiş bir sertifika, süresi dolana kadar hâlâ bir oturum açar. IOHandler=iohSChannel ile istemci sertifikasının iptal durumu yalnızca SChannel_Options.Revocation.Check varsayılan olan scrcDisabled dışında bir değere ayarlandığında sorgulanır: scrcEndCertificate yalnızca istemci sertifikasını denetler, scrcChainExcludeRoot onu ara sertifikalarla birlikte denetler ve scrcChain kökü de kapsar. Revocation.Timeout, CRL ve OCSP alımının tamamını sınırlar (varsayılan 5000 ms), böylece erişilemeyen bir yanıtlayıcı handshake'i askıda bırakamaz; Revocation.CacheOnly yalnızca Windows'un zaten önbelleğe almış olduğunu kullanır ve hiçbir zaman ağa gitmez; Revocation.IgnoreRevocationOffline ve Revocation.IgnoreNoRevocationCheck (her ikisi de True) erişilemeyen bir yanıtlayıcının veya hiçbir iptal bilgisi yayımlamayan bir istemci sertifikasının kabul edilip edilmeyeceğine karar verir. İptal edildiği doğrulanmış bir sertifika her zaman reddedilir. Preset := tlspSecureDefaults ayarlanması denetimi scrcChainExcludeRoot olarak etkinleştirir ve her iki yumuşak hata ayarını korur, böylece daha önce kabul edilen bir istemci kabul edilmeye devam eder. Bkz. Server SSL | SChannel Client Certificate Revocation.

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.

Örnek


oServer := TsgcWebSocketServer.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;

Özelliklere Dön