TsgcWebSocketProxyServer › Methoden › ReloadCertificates
Installeert een vernieuwd TLS-certificaat zonder de server te stoppen; nieuwe TLS-handshakes gebruiken het en geopende verbindingen houden het oude certificaat totdat ze worden gesloten.
procedure ReloadCertificates;
Roep ReloadCertificates aan na een certificaatvernieuwing (bijvoorbeeld een ACME- of Let's Encrypt-vernieuwing) om het nieuwe certificaat zonder herstart te installeren. Nieuwe TLS-handshakes gebruiken het nieuwe certificaat en verbindingen die al open zijn blijven werken met het oude certificaat totdat ze worden gesloten. Overschrijf de certificaat- en sleutelbestanden ter plekke, of wijs nieuwe waarden toe aan SSLOptions.CertFile, KeyFile, RootCertFile en Password, en roep daarna ReloadCertificates aan. De methode kan vanuit elke thread worden aangeroepen terwijl de server actief is. Als de server niet actief is of SSL is uitgeschakeld, doet de aanroep niets. Het nieuwe certificaat en de privésleutel worden geladen en gecontroleerd voordat er iets verandert (de sleutel moet bij het certificaat passen). Als de controle mislukt, wordt een uitzondering gegenereerd en blijft de server het vorige certificaat gebruiken. Alleen het certificaat wordt opnieuw geladen: de overige SSLOptions (cipherlijst, TLS-versies enzovoort) en de wijzigingen die in OnSSLAfterCreateHandler zijn aangebracht behouden hun actieve waarden, dus voor het wijzigen daarvan is nog steeds een herstart nodig. De ondersteunde TLS-back-ends zijn OpenSSL (thread per verbinding, IOCP op Windows en EPOLL op Linux), SChannel en de native TLS van sgc (thread en IOCP/EPOLL). Een aangepaste TLS-provider die op de IOCP/EPOLL-engines is aangesloten, laadt opnieuw via zijn DoCreateTLSContext. Met stock Indy (niet de sgc Indy-fork) kan de klassieke OpenSSL-handler niet opnieuw laden en genereert ReloadCertificates een uitzondering "not supported". Met de native TLS worden TLS-sessietickets die vóór het opnieuw laden zijn uitgegeven daarna niet hervat, zodat clients gewoon een volledige handshake uitvoeren. Zie Beveiligde verbindingen.
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;