Serwer można skonfigurować do używania certyfikatów SSL. Aby uruchomić serwer produkcyjny z certyfikatem serwera, należy zakupić certyfikat od renomowanego dostawcy: Namecheap, GoDaddy, Thawte itp. Do celów testowych można użyć certyfikatu z podpisem własnym (patrz przykład Demos/Chat, który używa certyfikatu z podpisem własnym).
Certyfikat musi być w formacie PEM. PEM (Privacy Enhanced Mail) jest zdefiniowany w RFC 1421–1424; jest to format kontenera, który może zawierać tylko certyfikat publiczny (jak w instalacjach Apache i plikach certyfikatów CA /etc/ssl/certs) lub może zawierać pełny łańcuch certyfikatów, w tym klucz publiczny, klucz prywatny i certyfikaty główne. Aby utworzyć pojedynczy certyfikat PEM, należy otworzyć plik klucza prywatnego, skopiować jego zawartość i wkleić do pliku certyfikatu.
Przykład:
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-----
Aby włączyć SSL, wystarczy włączyć właściwość SSL i skonfigurować ścieżki do plików CertFile, KeyFile oraz RootFile. Jeśli certyfikat zawiera pełny łańcuch certyfikatów (klucz publiczny, klucz prywatny itp.), należy ustawić wszystkie ścieżki na ten sam certyfikat.
Kolejną właściwością, którą należy ustawić, jest SSLOptions.Port — jest to port używany dla bezpiecznych połączeń.
Przykład: konfiguracja SSL na adresie IP 127.0.0.1 i porcie 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;
Serwer można skonfigurować do nasłuchiwania na więcej niż jednym adresie IP i porcie; zapoznaj się z artykułem dotyczącym powiązań, który wyjaśnia zasadę działania. Serwer można skonfigurować tak, aby jednocześnie akceptował połączenia SSL i bez SSL (nasłuchując oczywiście na różnych portach). Wystarczy powiązać się z dwoma różnymi portami i skonfigurować jeden port dla połączeń SSL, a drugi dla połączeń bez SSL.
Przykład: konfiguracja serwera na adresie IP 127.0.0.1, porcie 80 (bez szyfrowania) i 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;