O servidor pode ser configurado para utilizar Certificados SSL. Para obter um servidor de produção com um certificado de servidor, você deve adquirir um certificado de um provedor conhecido: Namecheap, GoDaddy, Thawte, etc. Para fins de teste, você pode utilizar um certificado autoassinado (verifique o exemplo Demos/Chat, que utiliza um certificado autoassinado).
O certificado deve estar no formato PEM, o PEM (de Privacy Enhanced Mail) é definido nas RFCs 1421 a 1424; é um formato de container que pode incluir apenas o certificado público (como em instalações do Apache e arquivos de certificado CA /etc/ssl/certs), ou pode incluir uma cadeia de certificados completa, incluindo chave pública, chave privada e certificados raiz. Para criar um único certificado pem, basta abrir seu arquivo de chave privada, copiar o conteúdo e colá-lo no arquivo de certificado.
Exemplo:
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, basta habilitar a propriedade SSL e configurar os caminhos para CertFile, KeyFile e RootFile. Se o certificado contém toda a cadeia de certificados (chave pública, chave privada, etc.), basta definir todos os caminhos para o mesmo certificado.
Outra propriedade que você deve definir é SSLOptions.Port, esta é a porta usada para conexões seguras.
Exemplo: configure SSL no IP 127.0.0.1 e Port 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;
Você pode configurar o servidor para escutar em mais de um IP e porta; confira o artigo sobre Binding, que explica como funciona. O servidor pode ser configurado para permitir conexões SSL e conexões não-SSL ao mesmo tempo (é claro, escutando em portas diferentes). Você só precisa vincular a duas portas diferentes e configurar uma porta para conexões SSL e outra porta para conexões não-SSL.
Exemplo: configurar o servidor no IP 127.0.0.1, porta 80 (não criptografada) 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;