TsgcWebSocketProxyServer › Metody › ReloadCertificates

ReloadCertificates Metoda

Instaluje odnowiony certyfikat TLS bez zatrzymywania serwera; nowe uzgodnienia TLS go używają, a otwarte połączenia zachowują stary certyfikat do momentu ich zamknięcia.

Składnia

procedure ReloadCertificates;

Uwagi

Wywołaj ReloadCertificates po odnowieniu certyfikatu (na przykład przez klienta ACME lub Let's Encrypt), aby zainstalować nowy certyfikat bez restartu. Nowe uzgodnienia TLS używają nowego certyfikatu, a połączenia już otwarte działają dalej ze starym certyfikatem do momentu ich zamknięcia. Nadpisz pliki certyfikatu i klucza w miejscu albo przypisz nowe wartości do SSLOptions.CertFile, KeyFile, RootCertFile i Password, a następnie wywołaj ReloadCertificates. Metodę można wywołać z dowolnego wątku, gdy serwer jest aktywny. Jeśli serwer nie jest aktywny lub SSL jest wyłączone, wywołanie nic nie robi. Nowy certyfikat i klucz prywatny są wczytywane i sprawdzane, zanim cokolwiek się zmieni (klucz musi pasować do certyfikatu). Jeśli sprawdzenie się nie powiedzie, zgłaszany jest wyjątek, a serwer nadal używa poprzedniego certyfikatu. Przeładowywany jest tylko certyfikat: pozostałe SSLOptions (lista szyfrów, wersje TLS itd.) oraz zmiany wprowadzone w OnSSLAfterCreateHandler zachowują swoje działające wartości, więc ich zmiana nadal wymaga restartu. Obsługiwane silniki TLS to OpenSSL (wątek na połączenie, IOCP w systemie Windows i EPOLL w systemie Linux), SChannel oraz natywny TLS sgc (wątki i IOCP/EPOLL). Własny dostawca TLS podłączony do silników IOCP/EPOLL przeładowuje certyfikat przez swoje DoCreateTLSContext. Przy standardowym Indy (nie forku Indy sgc) klasyczny moduł OpenSSL nie potrafi przeładować certyfikatu, a ReloadCertificates zgłasza wyjątek "not supported". W przypadku natywnego TLS bilety sesji TLS wydane przed przeładowaniem nie są po nim wznawiane, więc klienci po prostu wykonują pełne uzgodnienie. Zobacz Bezpieczne połączenia.

Przykład


procedure TForm1.RenewCertificate;
begin
  try
    oServer.SSLOptions.CertFile := 'C:\certs\renewed\fullchain.pem';
    oServer.SSLOptions.KeyFile := 'C:\certs\renewed\privkey.pem';
    oServer.ReloadCertificates;
  except
    on E: Exception do
      ShowMessage('Certificate reload failed: ' + E.Message);
  end;
end;

Powrót do metod