TsgcWebSocketServer | Server SSL

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.

 

Configuração SSL simples

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;

 

SSL and Non-SSL

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;