TsgcQUICServer › Eigenschaften › QUICOptions

QUICOptions Eigenschaft

Serverkonfiguration: das obligatorische TLS-Zertifikat und der private Schlüssel sowie das Verbindungslimit.

Syntax

property QUICOptions: TsgcQUICServerOptions read FQUICOptions write SetQUICOptions;

Standardwert

MaxConnections=0; SSLOptions.Password=''; SSLOptions.VerifyCertificate=False; SSLOptions.OpenSSL_Options.APIVersion=oslAPI_3_0

Hinweise

Fasst alles zusammen, was auf den QUIC-Listener angewendet wird, wenn Start ihn erstellt. Dies ist die einzige Eigenschaft, die TsgcQUICServer neben seinen Ereignissen veröffentlicht, hier findet daher die gesamte Servereinrichtung statt. Das Zuweisen der Eigenschaft kopiert die Quellwerte (Assign-Semantik), anstatt das Objekt zu ersetzen, das übliche Vorgehen ist daher, die Mitglieder direkt zu setzen.

Ein Zertifikat und ein privater Schlüssel sind zwingend erforderlich. QUIC läuft immer über TLS 1.3 (RFC 9001), es gibt keinen Klartextmodus, daher kann der Server ohne sie nicht starten. Start löst eine Ausnahme aus, wenn einer der beiden Pfade leer ist, wenn eine Datei nicht geladen werden kann oder wenn der Schlüssel nicht zum Zertifikat passt.

TsgcQUICServerOptions Member

NameTypHinweiseBeschreibung
SSLOptionsTsgcQUICServerSSLOptions—Die TLS-Konfiguration, die in der nächsten Tabelle im Detail beschrieben wird.
MaxConnectionsInteger0Maximale Anzahl gleichzeitiger Verbindungen. 0 bedeutet unbegrenzt. Sobald das Limit erreicht ist, werden weitere vom Listener angebotene Verbindungen sofort verworfen, ohne OnQUICConnect-Benachrichtigung.

TsgcQUICServerSSLOptions-Member

NameTypHinweiseBeschreibung
CertFilestring''Erforderlich. Pfad zum Server-Zertifikat, PEM-codiert. Wird mit SSL_CTX_use_certificate_file unter Verwendung von SSL_FILETYPE_PEM geladen, daher muss die Datei im PEM-Format vorliegen, nicht in DER. Wenn Ihre CA eine Zwischenzertifikatskette ausgestellt hat, fügen Sie die Kette in dieser Datei zusammen, das Leaf-Zertifikat zuerst.
KeyFilestring''Erforderlich. Pfad zum privaten Schlüssel, der zu CertFile passt, PEM-codiert. Wird mit SSL_CTX_use_PrivateKey_file geladen. Das Paar wird anschließend mit SSL_CTX_check_private_key überprüft, sodass ein nicht passender Schlüssel bereits bei Start fehlschlägt und nicht erst beim Handshake. Ein verschlüsselter (passphrasengeschützter) Schlüssel wird unterstützt, setzen Sie die Passphrase in Password.
Passwordstring''Passphrase für einen verschlüsselten privaten Schlüssel. Der Server installiert einen OpenSSL-Passwort-Callback, bevor er KeyFile lädt, sodass ein passphrasengeschützter PEM-Schlüssel ohne Eingabeaufforderung auf der Konsole geladen wird. Lassen Sie das Feld für einen unverschlüsselten Schlüssel leer. In .NET wird dasselbe Member auch beim Laden einer PFX-Datei verwendet.
RootCertFilestring''Pfad zum CA-Stammzertifikat, das zur Validierung von Client-Zertifikaten verwendet wird. Wird gelesen, wenn VerifyCertificate True ist. Ist er leer, werden stattdessen die OpenSSL-Standardpfade zur Überprüfung verwendet.
VerifyCertificateBooleanFalseBei True wird das Client-Zertifikat angefordert und überprüft (mutual TLS). Zuerst werden die CA-Vertrauensanker aus RootCertFile geladen, dann wird der Kontext auf SSL_VERIFY_PEER mit SSL_VERIFY_FAIL_IF_NO_PEER_CERT gesetzt, sodass ein Client, der kein Zertifikat präsentiert oder eines, das nicht validiert werden kann, abgelehnt wird.
OpenSSL_OptionsTsgcOpenSSLClient_OptionsAPIVersion=oslAPI_3_0Low-Level-OpenSSL-Einstellungen, hauptsächlich welche Bibliothek geladen wird und von wo: APIVersion, LibPath, LibPathCustom, UnixSymLinks, VersionMin, CurveList, LegacyProvider. APIVersion ist standardmäßig oslAPI_3_0 und muss dort bleiben, QUIC benötigt die OpenSSL 3.x-API. Die Auswahl von oslAPI_1_0 oder oslAPI_1_1 löst QUIC requires OpenSSL 3.x API aus.
IOHandlerTwsTLSIOHandleriohOpenSSLTLS-Engine des QUIC-Handshakes. iohOpenSSL behält den OpenSSL-Pfad bei, bei dem die Engine automatisch gewählt wird (siehe QUICMode). iohNativeTLS führt den TLS-1.3-Handshake auf der nativen TLS-Engine des sgcCrypto-Packs aus und verwendet immer die sgc-QUIC-Engine (QUICMode = qmCustom). Das Zertifikat wird als PEM oder PFX gelesen, und Client-Zertifikate werden gegen RootCertFile oder die Systemvertrauensanker überprüft. Session-Tickets, Wiederaufnahme und 0-RTT funktionieren wie bei OpenSSL. Der QUIC-Paketschutz ist ebenfalls nativ, sodass OpenSSL überhaupt nicht geladen wird.

Unterschiede zwischen Delphi und .NET

MaxConnections, CertFile, KeyFile, Password und VerifyCertificate werden in beiden Implementierungen berücksichtigt. In .NET wird VerifyCertificate als ClientCertificateRequired angewendet, und Password wird auch beim Laden einer PFX-Datei statt eines PEM-Paars verwendet. Der .NET-Zertifikatslader akzeptiert Dateien mit .pem, .crt, .cer und .key als PEM und behandelt alles andere als PFX.

Erstellen eines Testzertifikats

Jedes TLS-1.3-fähige Zertifikat- und Schlüsselpaar funktioniert. Für die Entwicklung genügt ein selbstsigniertes Paar, den Clients muss dann jedoch mitgeteilt werden, ihm zu vertrauen (oder die Überprüfung zu überspringen):

openssl req -x509 -newkey rsa:2048 -keyout server.key -out server.crt -days 365 -nodes -subj "/CN=localhost"

-nodes schreibt den Schlüssel unverschlüsselt, was die einfachste Variante ist. Ein unverschlüsselter Schlüssel funktioniert mit dem Server, ein verschlüsselter ebenso, setzen Sie dann dessen Passphrase in SSLOptions.Password. Verwenden Sie im Produktivbetrieb das von Ihrer CA ausgestellte Zertifikat und den zugehörigen Schlüssel, wobei die Zwischenzertifikatskette in der Zertifikatsdatei angehängt wird.

Beispiel


oServer := TsgcQUICServer.Create(nil);
oServer.Port := 4433;

// mandatory: QUIC always runs over TLS 1.3
oServer.QUICOptions.SSLOptions.CertFile := 'server.crt';
oServer.QUICOptions.SSLOptions.KeyFile := 'server.key';

// optional: which OpenSSL 3.5+ build to load, and from where
oServer.QUICOptions.SSLOptions.OpenSSL_Options.APIVersion := oslAPI_3_0;
oServer.QUICOptions.SSLOptions.OpenSSL_Options.LibPath := oslpCustomPath;
oServer.QUICOptions.SSLOptions.OpenSSL_Options.LibPathCustom := '.\openssl\';

// optional: connection limit
oServer.QUICOptions.MaxConnections := 1000;

oServer.OnQUICData := OnQUICDataEvent;
oServer.Start;

Zurück zu Properties