Server SSL | SChannel for Indy Servers

Indy-basierte Serverkomponenten (TsgcWebSocketServer, TsgcWebSocketHTTPServer) können Windows SChannel (Secure Channel) als TLS-Anbieter anstelle von OpenSSL verwenden. SChannel ist die native Windows-TLS- Implementierung, sodass es keine externen DLLs erfordert.

Wie es funktioniert

Wenn eine Server-Komponente SSL aktiviert hat und der IOHandler auf iohSChannel gesetzt ist, erstellt der Server eine TsgcIdServerIOHandlerSSLSChannel-Instanz, die alle TLS-Operationen über die Windows-SChannel-API verarbeitet. Für jede eingehende Client-Verbindung führt der Server den TLS-Handshake über den SChannel-Anbieter durch, handelt die Protokollversion und Cipher-Suite aus und bindet das konfigurierte Zertifikat.

SChannel liest Zertifikate aus dem Windows- Zertifikatspeicher oder aus einer PFX- Datei (.pfx / .p12). Es werden keine PEM-Dateien benötigt und es müssen keine OpenSSL-Bibliotheken bereitgestellt werden.

Konfiguration

Um SChannel auf einem Indy-Server zu aktivieren, konfigurieren Sie die folgenden Eigenschaften:

1. Setzen Sie die Eigenschaft SSL auf True.

2. Setzen Sie SSLOptions.IOHandler auf iohSChannel.

3. Setzen Sie SSLOptions.Version auf die gewünschte TLS-Version (tls1_2, tls1_3, ...).

4. Setzen Sie SSLOptions.Port auf den für sichere Verbindungen verwendeten Port.

5. Konfigurieren Sie das Zertifikat mit einer der beiden unten beschriebenen Methoden.

SChannel_Options Eigenschaften

Die Untereigenschaft SSLOptions.SChannel_Options stellt die SChannel-spezifischen Einstellungen bereit:

Eigenschaft Beschreibung
CertHash Der Thumbprint (hexadezimaler Hash) eines im Windows-Zertifikatspeicher installierten Zertifikats.
CertStoreName Welcher Zertifikatspeicher durchsucht werden soll: scsnMY (Personal), scsnRoot, scsnTrust, scsnCA.
CertStorePath Speicherort: scspStoreLocalMachine oder scspStoreCurrentUser.
CipherList Optionale, durch Doppelpunkt getrennte Liste von Verschlüsselungsalgorithmen (z. B. CALG_AES_256:CALG_AES_128). Leer bedeutet, Systemstandards verwenden.
UseLegacyCredentials Wenn True, wird die Legacy-Struktur SCHANNEL_CRED anstelle von SCH_CREDENTIALS verwendet. Aktivieren Sie dies für ältere Windows-Versionen, die die neuere API nicht unterstützen.

Zusätzlich werden die allgemeinen SSLOptions- Eigenschaften CertFile und Password verwendet, wenn ein Zertifikat aus einer PFX-Datei geladen wird.

Zertifikat aus dem Windows Store

Wenn das Zertifikat bereits im Windows-Zertifikatspeicher installiert ist, geben Sie den Fingerabdruck des Zertifikats an und geben Sie an, wo es sich befindet.

Um den Thumbprint zu finden, öffnen Sie PowerShell und führen Sie aus:

dir cert:\localmachine\my

Die Spalte Thumbprint zeigt den hexadezimalen Hash an, den Sie benötigen.


Directory: Microsoft.PowerShell.Security\Certificate::localmachine\my
Thumbprint                                Subject
----------                                -------
C12A8FC8AE668F866B48F23E753C93D357E9BE10  CN=*.mydomain.com


oServer := TsgcWebSocketServer.Create(nil);
oServer.SSL := True;
oServer.SSLOptions.IOHandler := iohSChannel;
oServer.SSLOptions.Version := tls1_2;
oServer.SSLOptions.Port := 443;
oServer.Port := 443;
oServer.SSLOptions.SChannel_Options.CertHash := 'C12A8FC8AE668F866B48F23E753C93D357E9BE10';
oServer.SSLOptions.SChannel_Options.CertStoreName := scsnMY;
oServer.SSLOptions.SChannel_Options.CertStorePath := scspStoreLocalMachine;
oServer.Active := True;

Zertifikat aus PFX-Datei

Wenn Sie eine PFX-(.pfx- oder .p12-)Zertifikatdatei haben, setzen Sie die Eigenschaften CertFile und Password in SSLOptions. SChannel importiert das Zertifikat beim Start.


oServer := TsgcWebSocketServer.Create(nil);
oServer.SSL := True;
oServer.SSLOptions.IOHandler := iohSChannel;
oServer.SSLOptions.Version := tls1_2;
oServer.SSLOptions.Port := 443;
oServer.Port := 443;
oServer.SSLOptions.CertFile := 'c:\certificates\server.pfx';
oServer.SSLOptions.Password := 'mypassword';
oServer.Active := True;

Wenn Sie ein PEM-Zertifikat und einen privaten Schlüssel haben, konvertieren Sie sie zuerst mit OpenSSL in das PFX-Format:

openssl pkcs12 -inkey server.key -in server.crt -export -out server.pfx

TLS-Version

Verwenden Sie die Eigenschaft SSLOptions.Version, um zu steuern, welche TLS-Version der Server akzeptiert:

Value Beschreibung
tls1_0 TLS 1.0 (nicht empfohlen)
tls1_1 TLS 1.1
tls1_2 TLS 1.2 (empfohlen)
tls1_3 TLS 1.3
tlsUndefined TLS 1.0, 1.1 und 1.2 akzeptieren

Cipher List

Standardmäßig verwendet SChannel die System-Cipher-Konfiguration. Sie können die erlaubten Cipher einschränken, indem Sie SChannel_Options.CipherList auf eine durch Doppelpunkte getrennte Liste von Algorithmusnamen setzen, zum Beispiel:

CALG_AES_256:CALG_AES_128

Lassen Sie diese Eigenschaft leer, um die Windows-Standardwerte zu verwenden.

Legacy Credentials

Windows Server 2019 und früher unterstützen möglicherweise nicht die neuere SCH_CREDENTIALS- API. Wenn der Server auf einer älteren Windows-Version nicht startet, setzen Sie SChannel_Options.UseLegacyCredentials auf True, um stattdessen die veraltete SCHANNEL_CRED-Struktur zu verwenden.

Die Komponente erkennt die Windows-Version in den meisten Fällen automatisch, aber Sie können bei Bedarf den Legacy-Modus erzwingen.

Vorteile gegenüber OpenSSL

Hinweise