OpenSSL is een softwarebibliotheek voor toepassingen die communicatie via computernetwerken beveiligen tegen afluisteren of waarbij de identiteit van de andere partij moet worden vastgesteld. Het wordt veel gebruikt door internetservers, inclusief de meerderheid van HTTPS-websites.
Deze bibliotheek is vereist door componenten gebaseerd op de Indy-bibliotheek wanneer een beveiligde verbinding nodig is. Als uw applicatie OpenSSL vereist, moet u de benodigde bestanden in uw bestandssysteem hebben voordat u uw applicatie implementeert:
Momenteel ondersteunt sgcWebSockets de volgende versies: 1.0.2, 1.1 en 3.0 tot 3.3 openSSL.
| Platform | API 1.0 | API 1.1 | API 3.* | Statisch/dynamisch koppelen |
|---|---|---|---|---|
| Windows (32-bit en 64-bit) | libeay32.dll en ssleay32.dll | libcrypto-1_1.dll and libssl-1_1.dll | libcrypto-3.dll and libssl-3.dll | Dynamisch |
| OSX | libcrypto.dylib, libssl.dylib | libcrypto.1.1.dylib, libssl.1.1.dylib | libcrypto.3.dylib, libssl.3.dylib | Dynamisch |
| iOS-apparaat (32-bit en 64-bit) | libcrypto.a en libssl.a | libcrypto.a en libssl.a | libcrypto.a en libssl.a | Static |
| iOS Simulator | libcrypto.dylib, libssl.dylib | libcrypto.1.1.dylib, libssl.1.1.dylib | libcrypto.3.dylib, libssl.3.dylib | Dynamisch |
| Android-apparaat | libcrypto.so, libssl.so | libcrypto.so, libssl.so | libcrypto.so, libssl.so | Dynamisch |
Zie hieronder hoe u OpenSSL-bibliotheken configureert voor elk platform:
Op Indy gebaseerde sgcWebSockets-componenten bieden de mogelijkheid om bepaalde OpenSSL-eigenschappen te configureren. Toegang tot de volgende eigenschappen:
API-versie
Standaard Indy-bibliotheek staat alleen het laden van 1.0.2 OpenSSL-bibliotheken toe; deze bibliotheken zijn verouderd en de nieuwste OpenSSL-releases gebruiken de 1.1.1 API.
sgcWebSockets Enterprise stelt u in staat 1.1.1 openSSL-bibliotheken te laden; in deze eigenschap kunt u configureren welke openSSL API-versie wordt geladen. Per proces kan slechts één API-versie worden geladen (u kunt openSSL 1.0.2 en 1.1.1 bibliotheken dus niet in dezelfde toepassing mengen).
LibPath
Met deze eigenschap kunt u de locatie van de OpenSSL-bibliotheken instellen. Dit is nuttig voor Android- of OSX-projecten, waarbij de locatie van de OpenSSL-bibliotheken moet worden ingesteld.
Accepteert de volgende waarden:
Gebruik een callback om aanvullende OpenSSL-functies te laden die standaard niet zijn gedefinieerd. U kunt meer lezen op OpenSSL Extra functies laden.
Als u TLS 1.2 en 1.3 op uw server wilt ondersteunen met de beste beveiliging en prestaties, gebruik dan de volgende configuratie:
SSLOptions.Version := tls1_3;
SSLOptions.OpenSSL_Options.VersionMin := tls1_2;
SSLOptions.OpenSSL_Options.APIVersion := oslAPI_3_0;
Stel de volgende cijferlijst in.
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
U kunt zelfondertekende certificaten gebruiken voor testdoeleinden. U hoeft alleen het volgende commando uit te voeren om een zelfondertekend certificaat aan te maken:
openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem
Er worden 2 bestanden aangemaakt: cert.pem (certificaat) en key.pem (privésleutel). U kunt beide bestanden combineren tot één bestand. Maak een nieuw bestand aan en kopieer de inhoud van beide bestanden daarin. De structuur ziet er dan als volgt uit:
-----BEGIN PRIVATE KEY-----
....
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
....
-----END CERTIFICATE-----
SSL_GET_RECORD: wrong version number
Deze fout betekent dat de server en de client verschillende versies van het SSL/TLS-protocol gebruiken. Om dit op te lossen, probeert u de juiste versie in te stellen in het server- en/of clientcomponent.
Server.SSLOptions.Version
Client.TLSOptions.Version
SSL3_GET_RECORD: decryption failed or bad record mac
Deze fout wordt doorgaans gegenereerd wanneer:
1. Controleer of u de nieuwste versie van OpenSSL gebruikt. Als deze te oud is, werk dan bij naar de nieuwste ondersteunde versie.
2. Als deze fout willekeurig optreedt, komt dit meestal doordat meer dan één thread toegang heeft tot de OpenSSL-verbinding. U kunt proberen NotifyEvents = neNoSync in te stellen, wat betekent dat de gebeurtenissen: OnConnect, OnDisconnect, OnMessage... worden geactiveerd in de context van de verbindingsthread. Dit vermijdt sommige synchronisatieproblemen en biedt betere prestaties. Als nadeel, als u bijvoorbeeld een visueel besturingselement op een formulier bijwerkt wanneer u een bericht ontvangt, moet u uw eigen synchronisatiemethoden implementeren omdat visuele besturingselementen niet thread-veilig zijn.