OpenSSL

OpenSSL est une bibliothèque logicielle pour les applications qui sécurisent les communications sur les réseaux informatiques contre l'espionnage ou qui ont besoin d'identifier la partie à l'autre bout. Elle est largement utilisée par les serveurs Internet, notamment la majorité des sites HTTPS.

 

Cette bibliothèque est requise par les composants basés sur la bibliothèque Indy lorsqu'une connexion sécurisée est nécessaire. Si votre application nécessite OpenSSL, vous devez avoir les fichiers nécessaires dans votre système de fichiers avant de déployer votre application :

 

Actuellement, sgcWebSockets prend en charge les versions : 1.0.2, 1.1 et 3.0 à 3.3 openSSL.

 

Plateforme API 1.0 API 1.1 API 3.* Liaison statique/dynamique
Windows (32 bits et 64 bits) libeay32.dll and ssleay32.dll libcrypto-1_1.dll and libssl-1_1.dll libcrypto-3.dll et libssl-3.dll Dynamique
OSX libcrypto.dylib, libssl.dylib libcrypto.1.1.dylib, libssl.1.1.dylib libcrypto.3.dylib, libssl.3.dylib Dynamique
Appareil iOS (32 bits et 64 bits) libcrypto.a et libssl.a libcrypto.a et libssl.a libcrypto.a et libssl.a Statique
Simulateur iOS libcrypto.dylib, libssl.dylib libcrypto.1.1.dylib, libssl.1.1.dylib libcrypto.3.dylib, libssl.3.dylib Dynamique
Appareil Android libcrypto.so, libssl.so libcrypto.so, libssl.so libcrypto.so, libssl.so Dynamique

 

 

Découvrez ci-dessous comment configurer les bibliothèques OpenSSL pour chaque plateforme :

 

 

Configurations openSSL

Les composants sgcWebSockets basés sur Indy vous permettent de configurer certaines propriétés OpenSSL. Accédez aux propriétés suivantes :

 

 

Version de l'API

 

La bibliothèque Indy standard ne permet de charger que les bibliothèques OpenSSL 1.0.2 ; ces bibliothèques ont été dépréciées et les dernières versions d'OpenSSL utilisent l'API 1.1.1.

sgcWebSockets Enterprise vous permet de charger les bibliothèques openSSL 1.1.1 ; vous pouvez configurer dans cette propriété quelle version de l'API openSSL sera chargée. Une seule version de l'API peut être chargée par processus (vous ne pouvez donc pas mélanger les bibliothèques openSSL 1.0.2 et 1.1.1 dans la même application).

 

 

LibPath

 

Cette propriété vous permet de définir l'emplacement des bibliothèques openSSL. Ceci est utile pour les projets Android ou OSX, où l'emplacement des bibliothèques openSSL doit être défini.

Accepte les valeurs suivantes :

 

 

 

Charger des fonctions OpenSSL supplémentaires

Utilisez un callback pour charger des fonctions OpenSSL supplémentaires non définies par défaut. Vous pouvez en savoir plus sur Chargement de fonctions OpenSSL supplémentaires.

 

Chiffrements

Si vous souhaitez fournir la prise en charge de TLS 1.2 et 1.3 sur votre serveur avec la meilleure sécurité et performance, utilisez la configuration suivante :

 

SSLOptions.Version := tls1_3;

SSLOptions.OpenSSL_Options.VersionMin := tls1_2;

SSLOptions.OpenSSL_Options.APIVersion := oslAPI_3_0;

 

Et définissez la liste de chiffrement suivante.

 

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

 

Certificats auto-signés

Vous pouvez utiliser des certificats auto-signés à des fins de test. Il vous suffit d'exécuter la commande suivante pour créer un certificat auto-signé :

 

openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem

Cela créera 2 fichiers : cert.pem (certificat) et key.pem (clé privée). Vous pouvez combiner les deux fichiers en un seul. Il suffit de créer un nouveau fichier et d'y copier le contenu des deux fichiers. Vous obtiendrez alors une structure comme celle-ci :

 

-----BEGIN PRIVATE KEY-----

....

-----END PRIVATE KEY-----

-----BEGIN CERTIFICATE-----

....

-----END CERTIFICATE-----

 

Erreurs courantes

SSL_GET_RECORD: wrong version number

 

Cette erreur signifie que le serveur et le client utilisent des versions différentes du protocole SSL/TLS. Pour y remédier, essayez de définir la version correcte dans le composant serveur et/ou client.

 

Server.SSLOptions.Version

Client.TLSOptions.Version

 

SSL3_GET_RECORD: decryption failed or bad record mac

 

Généralement, cette erreur est déclenchée lorsque :

 

1. Vérifiez que vous utilisez la dernière version d'OpenSSL. Si elle est trop ancienne, mettez-la à jour vers la dernière version supportée.

2. Si cette erreur apparaît de manière aléatoire, c'est généralement parce que plus d'un thread accède à la connexion OpenSSL. Vous pouvez essayer de définir NotifyEvents = neNoSync, ce qui signifie que les événements : OnConnect, OnDisconnect, OnMessage... seront déclenchés dans le contexte du thread de connexion, cela évite certains problèmes de synchronisation et offre de meilleures performances. En contrepartie, si par exemple vous mettez à jour un contrôle visuel dans un formulaire lorsque vous recevez un message, vous devez implémenter vos propres méthodes de synchronisation car les contrôles visuels ne sont pas thread-safe.