OpenSSL

OpenSSL è una libreria software per applicazioni che proteggono le comunicazioni su reti informatiche dalle intercettazioni o che devono identificare la controparte. È ampiamente utilizzata dai server Internet, inclusa la maggior parte dei siti HTTPS.

 

Questa libreria è richiesta dai componenti basati sulla libreria Indy quando è necessaria una connessione sicura. Se l'applicazione richiede OpenSSL, è necessario che i file necessari siano presenti nel file system prima di distribuire l'applicazione:

 

Attualmente, sgcWebSockets supporta le versioni: 1.0.2, 1.1 e 3.0 a 3.3 openSSL.

 

Platform API 1.0 API 1.1 API 3.* Collegamento statico/dinamico
Windows (32-bit e 64-bit) libeay32.dll and ssleay32.dll libcrypto-1_1.dll and libssl-1_1.dll libcrypto-3.dll e libssl-3.dll Dinamico
OSX libcrypto.dylib, libssl.dylib libcrypto.1.1.dylib, libssl.1.1.dylib libcrypto.3.dylib, libssl.3.dylib Dinamico
iOS Device (32-bit and 64-bit) libcrypto.a e libssl.a libcrypto.a e libssl.a libcrypto.a e libssl.a Statico
iOS Simulator libcrypto.dylib, libssl.dylib libcrypto.1.1.dylib, libssl.1.1.dylib libcrypto.3.dylib, libssl.3.dylib Dinamico
Dispositivo Android libcrypto.so, libssl.so libcrypto.so, libssl.so libcrypto.so, libssl.so Dinamico

 

 

Trovi di seguito come configurare OpenSSL per ciascuna piattaforma:

 

 

Configurazioni openSSL

I componenti di sgcWebSockets basati su Indy Le consentono di configurare alcune proprietà di OpenSSL. Accesso alle seguenti proprietà:

 

 

Versione API

 

La libreria Indy standard consente solo il caricamento delle librerie OpenSSL 1.0.2; queste librerie sono state deprecate e le ultime versioni di OpenSSL utilizzano l'API 1.1.1.

sgcWebSockets Enterprise consente di caricare le librerie 1.1.1 openSSL; in questa proprietà è possibile configurare quale versione dell'API openSSL verrà caricata. Solo una versione dell'API può essere caricata per processo (quindi non è possibile combinare le librerie openSSL 1.0.2 e 1.1.1 nella stessa applicazione).

 

 

LibPath

 

Questa proprietà consente di impostare la posizione delle librerie openSSL. È utile per i progetti Android o OSX, dove è necessario impostare la posizione delle librerie openSSL.

Accetta i seguenti valori:

 

 

 

Carica funzioni OpenSSL aggiuntive

Utilizzare un callback per caricare funzioni OpenSSL aggiuntive non definite per impostazione predefinita. Per ulteriori informazioni consultare OpenSSL: caricamento di funzioni aggiuntive.

 

Ciphers

Se si desidera fornire supporto per TLS 1.2 e 1.3 sul proprio server utilizzando la migliore sicurezza e prestazioni, utilizzare la seguente configurazione:

 

SSLOptions.Version := tls1_3;

SSLOptions.OpenSSL_Options.VersionMin := tls1_2;

SSLOptions.OpenSSL_Options.APIVersion := oslAPI_3_0;

 

E impostare il seguente elenco di cifrature.

 

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

 

Certificati autofirmati

È possibile utilizzare certificati auto-firmati a scopo di test. È sufficiente eseguire il seguente comando per creare un certificato auto-firmato:

 

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

Verranno creati 2 file: cert.pem (certificato) e key.pem (chiave privata). È possibile combinare entrambi i file in uno solo. È sufficiente creare un nuovo file e copiare il contenuto di entrambi i file in esso. Si otterrà così una struttura simile alla seguente:

 

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

....

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

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

....

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

 

Errori Comuni

SSL_GET_RECORD: wrong version number

 

Questo errore indica che il server e il client stanno utilizzando versioni diverse del protocollo SSL/TLS. Per risolvere il problema, provare a impostare la versione corretta nel componente server e/o client.

 

Server.SSLOptions.Version

Client.TLSOptions.Version

 

SSL3_GET_RECORD: decryption failed or bad record mac

 

Solitamente questo errore si genera quando:

 

1. Verificare che si stia utilizzando la versione più recente di OpenSSL. Se è troppo vecchia, aggiornare alla versione supportata più recente.

2. Se questo errore compare in modo casuale, di solito è perché più di un thread sta accedendo alla connessione OpenSSL. Può provare a impostare NotifyEvents = neNoSync, il che significa che gli eventi: OnConnect, OnDisconnect, OnMessage... verranno generati nel contesto del thread di connessione, questo evita alcuni problemi di sincronizzazione e fornisce prestazioni migliori. Come aspetto negativo, se ad esempio sta aggiornando un controllo visivo in un form quando riceve un messaggio, deve implementare i Suoi metodi di sincronizzazione perché i controlli visivi non sono thread-safe.