El servidor puede configurarse para usar certificados SSL. Para obtener un servidor de producción con un certificado de servidor, debe adquirir un certificado de un proveedor reconocido: Namecheap, GoDaddy, Thawte, etc. Para pruebas puede usar un certificado autofirmado (consulte el ejemplo Demos/Chat, que utiliza un certificado autofirmado).
El certificado debe estar en formato PEM. PEM (de Privacy Enhanced Mail) se define en los RFC 1421 a 1424; es un formato contenedor que puede incluir solo el certificado público (como en las instalaciones de Apache y los archivos de CA /etc/ssl/certs), o puede incluir una cadena de certificados completa que incluya la clave pública, la clave privada y los certificados raíz. Para crear un único certificado PEM, simplemente abra su archivo de clave privada, copie el contenido y péguelo en el archivo de certificado.
Ejemplo:
certificate.crt
-----BEGIN CERTIFICATE-----
.....
-----END CERTIFICATE-----
certificate.key
-----BEGIN PRIVATE KEY-----
.....
-----END PRIVATE KEY-----
certificate.pem
-----BEGIN PRIVATE KEY-----
.....
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
.....
-----END CERTIFICATE-----
Para habilitar SSL, simplemente habilite la propiedad SSL y configure las rutas a CertFile, KeyFile y RootFile. Si el certificado contiene toda la cadena de certificados (clave pública, clave privada, etc.), simplemente establezca todas las rutas al mismo certificado.
Otra propiedad que debe establecer es SSLOptions.Port, que es el puerto utilizado para las conexiones seguras.
Ejemplo: configurar SSL en la IP 127.0.0.1 y el puerto 443
oServer := TsgcWebSocketServer.Create(nil);
oServer.SSL := true;
oServer.SSLOptions.CertFile := 'c:\certificates\mycert.pem';
oServer.SSLOptions.KeyFile := 'c:\certificates\mycert.pem';
oServer.SSLOptions.RootCertFile := 'c:\certificates\mycert.pem';
oServer.SSLOptions.Port := 443;
oServer.Port := 443;
oServer.Active := true;
Puede configurar el servidor para que escuche en más de una IP y puerto; consulte el artículo sobre enlaces que explica cómo funciona. El servidor puede configurarse para permitir conexiones SSL y conexiones no SSL al mismo tiempo (escuchando, por supuesto, en puertos diferentes). Solo necesita enlazar a dos puertos distintos y configurar un puerto para conexiones SSL y otro puerto para conexiones no SSL.
Ejemplo: configurar el servidor en IP 127.0.0.1, puerto 80 (sin cifrado) y 443 (SSL)
oServer := TsgcWebSocketServer.Create(nil);
With oServer.Bindings.Add do
begin
IP := '127.0.0.1';
Port := 80;
end;
With oServer.Bindings.Add do
begin
IP := '127.0.0.1';
Port := 443;
end;
oServer.Port := 80;
oServer.SSL := true;
oServer.SSLOptions.CertFile := 'c:\certificates\mycert.pem';
oServer.SSLOptions.KeyFile := 'c:\certificates\mycert.pem';
oServer.SSLOptions.RootCertFile := 'c:\certificates\mycert.pem';
oServer.SSLOptions.Port := 443;
oServer.Active := true;