Il server può essere configurato per utilizzare Certificati SSL. Per ottenere un server di produzione con un certificato server, è necessario acquistare un certificato da un provider rinomato: Namecheap, GoDaddy, Thawte, ecc. A scopo di test è possibile utilizzare un certificato auto-firmato (consultare l'esempio Demos/Chat che utilizza un certificato auto-firmato).
Il certificato deve essere in formato PEM, PEM (da Privacy Enhanced Mail) è definito nelle RFC da 1421 a 1424, si tratta di un formato contenitore che può includere solo il certificato pubblico (come nelle installazioni Apache e nei file di certificato CA /etc/ssl/certs), oppure può includere un'intera catena di certificati comprendente chiave pubblica, chiave privata e certificati root. Per creare un singolo certificato pem, basta aprire il file della sua chiave privata, copiarne il contenuto e incollarlo nel file del certificato.
Esempio:
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-----
Per abilitare SSL, è sufficiente abilitare la proprietà SSL e configurare i percorsi di CertFile, KeyFile e RootFile. Se il certificato contiene l'intera catena di certificati (chiave pubblica, chiave privata, ecc.), impostare tutti i percorsi allo stesso certificato.
Un'altra proprietà da impostare è SSLOptions.Port, che è la porta utilizzata per le connessioni sicure.
Esempio: configurare SSL sull'IP 127.0.0.1 e sulla porta 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;
È possibile configurare il server per ascoltare su più di un IP e porta; consulti l' articolo Binding che spiega come funziona. Il server può essere configurato per consentire connessioni SSL e connessioni non SSL contemporaneamente (ovviamente, ascoltando su porte diverse). Le basta effettuare il binding su due porte diverse e configurare una porta per le connessioni SSL e un'altra porta per le connessioni non SSL.
Esempio: configuri il server in IP 127.0.0.1, porta 80 (non crittografata) e 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;