OpenSSL

OpenSSL es una biblioteca de software para aplicaciones que protegen las comunicaciones a través de redes informáticas contra la interceptación o que necesitan identificar a la parte en el otro extremo. Es ampliamente utilizada por los servidores de Internet, incluida la mayoría de los sitios web HTTPS.

 

Esta biblioteca es requerida por los componentes basados en la biblioteca Indy cuando se necesita una conexión segura. Si su aplicación requiere OpenSSL, debe tener los archivos necesarios en su sistema de archivos antes de desplegar su aplicación:

 

Actualmente, sgcWebSockets admite las versiones: 1.0.2, 1.1 y 3.0 a 3.3 de openSSL.

 

Plataforma API 1.0 API 1.1 API 3.* Enlace estático/dinámico
Windows (32 bits y 64 bits) libeay32.dll and ssleay32.dll libcrypto-1_1.dll and libssl-1_1.dll libcrypto-3.dll y libssl-3.dll Dinámico
OSX libcrypto.dylib, libssl.dylib libcrypto.1.1.dylib, libssl.1.1.dylib libcrypto.3.dylib, libssl.3.dylib Dinámico
Dispositivo iOS (32 bits y 64 bits) libcrypto.a and libssl.a libcrypto.a and libssl.a libcrypto.a and libssl.a Estático
iOS Simulator libcrypto.dylib, libssl.dylib libcrypto.1.1.dylib, libssl.1.1.dylib libcrypto.3.dylib, libssl.3.dylib Dinámico
Dispositivo Android libcrypto.so, libssl.so libcrypto.so, libssl.so libcrypto.so, libssl.so Dinámico

 

 

A continuación se indica cómo configurar las bibliotecas OpenSSL para cada plataforma:

 

 

Configuraciones de openSSL

Los componentes de sgcWebSockets basados en Indy permiten configurar algunas propiedades de OpenSSL. Acceda a las siguientes propiedades:

 

 

Versión de la API

 

La biblioteca Indy estándar solo permite cargar las bibliotecas OpenSSL 1.0.2; estas bibliotecas están obsoletas y las últimas versiones de OpenSSL utilizan la API 1.1.1.

sgcWebSockets Enterprise le permite cargar las bibliotecas openSSL 1.1.1; puede configurar en esta propiedad qué versión de la API de openSSL se cargará. Solo se puede cargar una versión de la API por proceso (por lo que no puede mezclar bibliotecas openSSL 1.0.2 y 1.1.1 en la misma aplicación).

 

 

LibPath

 

Esta propiedad le permite establecer la ubicación de las bibliotecas openSSL. Resulta útil para proyectos Android u OSX, donde se debe especificar la ubicación de las bibliotecas openSSL.

Acepta los siguientes valores:

 

 

 

Cargar funciones adicionales de OpenSSL

Use una devolución de llamada para cargar funciones adicionales de OpenSSL no definidas por defecto. Puede obtener más información en OpenSSL Load Additional Functions.

 

Cifrados

Si desea proporcionar soporte para TLS 1.2 y 1.3 en su servidor utilizando la mejor seguridad y rendimiento, utilice la siguiente configuración:

 

SSLOptions.Version := tls1_3;

SSLOptions.OpenSSL_Options.VersionMin := tls1_2;

SSLOptions.OpenSSL_Options.APIVersion := oslAPI_3_0;

 

Y establezca la siguiente lista de cifrado.

 

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

 

Certificados autofirmados

Puede usar certificados autofirmados con fines de prueba. Solo necesita ejecutar el siguiente comando para crear un certificado autofirmado:

 

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

Se crearán 2 archivos: cert.pem (certificado) y key.pem (clave privada). Puede combinar ambos archivos en uno solo. Simplemente cree un nuevo archivo y copie el contenido de ambos archivos en él. Así tendrá una estructura como esta:

 

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

....

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

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

....

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

 

Errores comunes

SSL_GET_RECORD: wrong version number

 

Este error significa que el servidor y el cliente están utilizando versiones diferentes del protocolo SSL/TLS. Para solucionarlo, intente establecer la versión correcta en el componente de servidor y/o cliente.

 

Server.SSLOptions.Version

Client.TLSOptions.Version

 

SSL3_GET_RECORD: decryption failed or bad record mac

 

Generalmente, este error se produce cuando:

 

1. Compruebe que está usando la versión más reciente de OpenSSL. Si es demasiado antigua, actualice a la última versión compatible.

2. Si este error aparece aleatoriamente, generalmente se debe a que más de un hilo está accediendo a la conexión OpenSSL. Puede intentar establecer NotifyEvents = neNoSync, lo que significa que los eventos OnConnect, OnDisconnect, OnMessage... se activarán en el contexto del hilo de conexión; esto evita algunos problemas de sincronización y proporciona mejor rendimiento. Como desventaja, si por ejemplo está actualizando un control visual en un formulario cuando recibe un mensaje, debe implementar sus propios métodos de sincronización porque los controles visuales no son seguros para subprocesos.