OpenSSL ist eine Softwarebibliothek für Anwendungen, die die Kommunikation über Computernetzwerke gegen Abhören absichern oder die Gegenseite identifizieren müssen. Sie wird häufig von Internetservern verwendet, einschließlich der Mehrheit der HTTPS-Websites.
Diese Bibliothek wird von Komponenten benötigt, die auf der Indy-Bibliothek basieren, wenn eine sichere Verbindung erforderlich ist. Wenn Ihre Anwendung OpenSSL benötigt, müssen die erforderlichen Dateien in Ihrem Dateisystem vorhanden sein, bevor Sie Ihre Anwendung bereitstellen:
Derzeit unterstützt sgcWebSockets: die OpenSSL-Versionen 1.0.2, 1.1 und 3.0 bis 3.3.
| Plattform | API 1.0 | API 1.1 | API 3.* | Statisches/Dynamisches Linking |
|---|---|---|---|---|
| Windows (32-bit und 64-bit) | libeay32.dll und ssleay32.dll | libcrypto-1_1.dll und libssl-1_1.dll | libcrypto-3.dll und libssl-3.dll | Dynamic |
| OSX | libcrypto.dylib, libssl.dylib | libcrypto.1.1.dylib, libssl.1.1.dylib | libcrypto.3.dylib, libssl.3.dylib | Dynamic |
| iOS-Gerät (32-Bit und 64-Bit) | libcrypto.a und libssl.a | libcrypto.a und libssl.a | libcrypto.a und libssl.a | Static |
| iOS Simulator | libcrypto.dylib, libssl.dylib | libcrypto.1.1.dylib, libssl.1.1.dylib | libcrypto.3.dylib, libssl.3.dylib | Dynamic |
| Android Device | libcrypto.so, libssl.so | libcrypto.so, libssl.so | libcrypto.so, libssl.so | Dynamic |
Erfahren Sie nachstehend, wie Sie OpenSSL -Bibliotheken für jede Plattform konfigurieren:
Indy-basierte sgcWebSockets-Komponenten ermöglichen es Ihnen, einige OpenSSL-Eigenschaften zu konfigurieren. Greifen Sie auf die folgenden Eigenschaften zu:
API-Version
Die Standard-Indy-Bibliothek erlaubt nur das Laden von 1.0.2-OpenSSL-Bibliotheken; diese Bibliotheken sind veraltet, und die neuesten OpenSSL-Versionen verwenden die 1.1.1-API.
sgcWebSockets Enterprise ermöglicht es Ihnen, 1.1.1-OpenSSL-Bibliotheken zu laden; Sie können in dieser Eigenschaft konfigurieren, welche OpenSSL-API-Version geladen wird. Pro Prozess kann nur eine API-Version geladen werden (Sie können also OpenSSL-1.0.2- und 1.1.1-Bibliotheken nicht in derselben Anwendung mischen).
LibPath
Diese Eigenschaft ermöglicht es Ihnen, den Speicherort der OpenSSL-Bibliotheken festzulegen. Dies ist nützlich für Android- oder OSX-Projekte, bei denen der Speicherort der OpenSSL-Bibliotheken festgelegt werden muss.
Akzeptiert die folgenden Werte:
Verwenden Sie einen Callback, um zusätzliche OpenSSL-Funktionen zu laden, die standardmäßig nicht definiert sind. Sie können mehr unter OpenSSL Load Additional Functions lesen.
Wenn Sie auf Ihrem Server Unterstützung für TLS 1.2 und 1.3 bereitstellen und die beste Sicherheit und Leistung verwenden möchten, verwenden Sie die folgende Konfiguration:
SSLOptions.Version := tls1_3;
SSLOptions.OpenSSL_Options.VersionMin := tls1_2;
SSLOptions.OpenSSL_Options.APIVersion := oslAPI_3_0;
Und setzen Sie die folgende Cipher-Liste.
AEAD-AES128-GCM-SHA256:AEAD-AES256-GCM-SHA384:AEAD-CHACHA20-POLY1305-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
Sie können selbstsignierte Zertifikate zu Testzwecken verwenden. Sie müssen lediglich den folgenden Befehl ausführen, um ein selbstsigniertes Zertifikat zu erstellen:
openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem
Es werden 2 Dateien erstellt: cert.pem (Zertifikat) und key.pem (privater Schlüssel). Sie können beide Dateien zu einer einzigen kombinieren. Erstellen Sie einfach eine neue Datei und kopieren Sie den Inhalt beider Dateien hinein. So erhalten Sie eine Struktur wie diese:
-----BEGIN PRIVATE KEY-----
....
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
....
-----END CERTIFICATE-----
SSL_GET_RECORD: wrong version number
Dieser Fehler bedeutet, dass Server und Client unterschiedliche Versionen des SSL/TLS-Protokolls verwenden. Um ihn zu beheben, versuchen Sie, die korrekte Version in der Server- und/oder Client-Komponente festzulegen.
Server.SSLOptions.Version
Client.TLSOptions.Version
SSL3_GET_RECORD: decryption failed or bad record mac
Üblicherweise wird dieser Fehler ausgelöst, wenn:
1. Prüfen Sie, ob Sie die neueste OpenSSL-Version verwenden. Wenn sie zu alt ist, aktualisieren Sie auf die neueste unterstützte Version.
2. Wenn dieser Fehler zufällig auftritt, liegt das normalerweise daran, dass mehr als ein Thread auf die OpenSSL-Verbindung zugreift. Sie können versuchen, NotifyEvents = neNoSync zu setzen, was bedeutet, dass die Ereignisse OnConnect, OnDisconnect, OnMessage... im Kontext des Verbindungs-Threads ausgelöst werden; dies vermeidet einige Synchronisationsprobleme und bietet bessere Leistung. Als Nachteil müssen Sie, wenn Sie zum Beispiel ein visuelles Steuerelement in einem Formular aktualisieren, wenn Sie eine Nachricht empfangen, Ihre eigenen Synchronisationsmethoden implementieren, da visuelle Steuerelemente nicht threadsicher sind.