TsgcWebSocketServer_HTTPAPI › 方法 › ReloadCertificates
在不停止服务器的情况下,为 HTTP.sys SSL 绑定重新绑定续期后的 TLS 证书;已建立的连接不受影响。
procedure ReloadCertificates;
在证书续期(例如 ACME 或 Let's Encrypt 续期)后调用 ReloadCertificates,即可在不重启的情况下安装新证书。赋值新的 SSLOptions.Hash(如果证书位于其他存储区,则同时赋值 CertStoreName),然后调用 ReloadCertificates。当服务器处于激活状态(Active)时,可以从任意线程调用。如果服务器未激活,或者 SSL 已禁用,则调用不执行任何操作。当 BindingOptions.ConfigureSSLCertificate 为 True(默认值)时,ReloadCertificates 会在 Windows 支持的情况下以原子方式重新绑定每个 SSL 绑定的证书。它需要与启动带 SSL 的服务器相同的管理员权限。已建立的连接不受影响,新的 TLS 握手使用新证书。如果无法绑定新证书,将引发异常,服务器继续使用之前的证书。当 ConfigureSSLCertificate 为 False 时,绑定由组件之外(netsh)管理,因此 ReloadCertificates 会引发异常,必须使用 netsh 更新绑定。在 .NET 中,http.sys 服务器运行在无法重新绑定证书的 HttpListener 之上,绑定始终通过 netsh 管理,因此当服务器以 https 处于活动状态时,ReloadCertificates 会引发 NotSupportedException,必须使用 netsh http update sslcert 更新证书。请参阅 安全连接。
procedure TForm1.RenewCertificate;
begin
try
oServer.SSLOptions.Hash := 'A1B2C3D4E5F60718293A4B5C6D7E8F9012345678';
oServer.ReloadCertificates;
except
on E: Exception do
ShowMessage('Certificate reload failed: ' + E.Message);
end;
end;