TsgcWebSocketProxyServer › Yöntemler › ReloadCertificates
Yenilenen bir TLS sertifikasını sunucuyu durdurmadan yükler; yeni TLS el sıkışmaları onu kullanır, açık bağlantılar ise kapanana kadar eski sertifikayı korur.
procedure ReloadCertificates;
ReloadCertificates'i bir sertifika yenilemesinden sonra (örneğin bir ACME veya Let's Encrypt yenilemesi) yeni sertifikayı yeniden başlatmadan yüklemek için çağırın. Yeni TLS el sıkışmaları yeni sertifikayı kullanır; zaten açık olan bağlantılar kapanana kadar eski sertifikayla çalışmaya devam eder. Sertifika ve anahtar dosyalarının üzerine yazın veya SSLOptions.CertFile, KeyFile, RootCertFile ve Password için yeni değerler atayın, ardından ReloadCertificates'i çağırın. Sunucu etkinken herhangi bir iş parçacığından çağrılabilir. Sunucu etkin değilse veya SSL devre dışıysa çağrı hiçbir şey yapmaz. Yeni sertifika ve özel anahtar, herhangi bir şey değişmeden önce yüklenir ve denetlenir (anahtar sertifikayla eşleşmelidir). Denetim başarısız olursa bir istisna oluşur ve sunucu önceki sertifikayı sunmaya devam eder. Yalnızca sertifika yeniden yüklenir: diğer SSLOptions (şifre listesi, TLS sürümleri vb.) ve OnSSLAfterCreateHandler içinde yapılan değişiklikler çalışan değerlerini korur, bu nedenle bunları değiştirmek yine yeniden başlatma gerektirir. Desteklenen TLS arka uçları OpenSSL (bağlantı başına iş parçacığı, Windows'ta IOCP ve Linux'ta EPOLL), SChannel ve sgc native TLS'tir (iş parçacığı ve IOCP/EPOLL). IOCP/EPOLL motorlarına takılan özel bir TLS provider, DoCreateTLSContext üzerinden yeniden yükleme yapar. Stock Indy ile (sgc Indy çatalı değil) klasik OpenSSL işleyicisi yeniden yükleyemez ve ReloadCertificates "not supported" istisnası oluşturur. Native TLS ile, yeniden yüklemeden önce verilen TLS oturum biletleri sonrasında sürdürülmez, bu yüzden istemciler basitçe tam bir el sıkışma yapar. Bkz. Güvenli Bağlantılar.
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;