TsgcWebSocketHTTPServer › 方法 › ReloadCertificates

ReloadCertificates 方法

在不停止服务器的情况下安装续期后的 TLS 证书;新的 TLS 握手使用新证书,已打开的连接在关闭前继续使用旧证书。

语法

procedure ReloadCertificates;

备注

在证书续期(例如 ACME 或 Let's Encrypt 续期)后调用 ReloadCertificates,即可在不重启的情况下安装新证书。新的 TLS 握手使用新证书,已经打开的连接在关闭之前继续使用旧证书。可以原地覆盖证书和密钥文件,或者为 SSLOptions.CertFile、KeyFile、RootCertFile 和 Password 赋新值,然后调用 ReloadCertificates。当服务器处于激活状态(Active)时,可以从任意线程调用。如果服务器未激活,或者 SSL 已禁用,则调用不执行任何操作。新证书和私钥会在任何更改发生之前先加载并检查(私钥必须与证书匹配)。如果检查失败,将引发异常,服务器继续使用之前的证书。仅重新加载证书:其他 SSLOptions(密码套件列表、TLS 版本等)以及在 OnSSLAfterCreateHandler 中所做的更改保持其运行时的值,因此更改这些内容仍需重启。支持的 TLS 后端有 OpenSSL(每连接一个线程、Windows 上的 IOCP 和 Linux 上的 EPOLL)、SChannel 以及 sgc 原生 TLS(线程以及 IOCP/EPOLL)。接入 IOCP/EPOLL 引擎的自定义 TLS 提供程序通过其 DoCreateTLSContext 重新加载。使用原版 Indy(而非 sgc Indy 分支)时,经典 OpenSSL 处理程序无法重新加载,ReloadCertificates 会引发 "not supported" 异常。使用原生 TLS 时,重新加载之前签发的 TLS 会话票据在重新加载之后不会被恢复,因此客户端只需执行一次完整握手。请参阅 安全连接。

示例


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;

返回方法