TsgcWebSocketHTTPServer › Metodi › ReloadCertificates

ReloadCertificates Metodo

Installa un certificato TLS rinnovato senza arrestare il server; i nuovi handshake TLS lo utilizzano e le connessioni aperte mantengono il vecchio certificato fino alla loro chiusura.

Sintassi

procedure ReloadCertificates;

Note

Chiami ReloadCertificates dopo il rinnovo di un certificato (ad esempio un rinnovo ACME o Let's Encrypt) per installare il nuovo certificato senza riavvio. I nuovi handshake TLS utilizzano il nuovo certificato, mentre le connessioni già aperte continuano a funzionare con il vecchio fino alla loro chiusura. Sovrascriva sul posto i file del certificato e della chiave, oppure assegni nuovi valori a SSLOptions.CertFile, KeyFile, RootCertFile e Password, quindi chiami ReloadCertificates. Può essere chiamato da qualsiasi thread mentre il server è attivo. Se il server non è attivo, o SSL è disabilitato, la chiamata non fa nulla. Il nuovo certificato e la chiave privata vengono caricati e verificati prima di modificare qualsiasi cosa (la chiave deve corrispondere al certificato). Se la verifica fallisce viene sollevata un'eccezione e il server continua a servire il certificato precedente. Viene ricaricato solo il certificato: le altre SSLOptions (elenco dei cifrari, versioni TLS e così via) e le modifiche apportate in OnSSLAfterCreateHandler mantengono i valori in esecuzione, quindi per modificarli è ancora necessario un riavvio. I back end TLS supportati sono OpenSSL (thread per connessione, IOCP su Windows ed EPOLL su Linux), SChannel e il TLS nativo di sgc (thread e IOCP/EPOLL). Un TLS Provider personalizzato collegato ai motori IOCP/EPOLL ricarica tramite il proprio DoCreateTLSContext. Con Indy standard (non il fork Indy di sgc) il gestore OpenSSL classico non può ricaricare e ReloadCertificates solleva un'eccezione "not supported". Con il TLS nativo, i ticket di sessione TLS emessi prima del ricaricamento non vengono ripresi dopo di esso, quindi i client eseguono semplicemente un handshake completo. Vedere Connessioni sicure.

Esempio


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;

Torna ai Metodi