TsgcWebSocketHTTPServer › 메서드 › ReloadCertificates
서버를 중지하지 않고 갱신된 TLS 인증서를 설치합니다. 새 TLS 핸드셰이크는 이 인증서를 사용하고, 이미 열려 있는 연결은 닫힐 때까지 이전 인증서를 유지합니다.
procedure ReloadCertificates;
인증서를 갱신한 후(예: ACME 또는 Let's Encrypt 갱신) ReloadCertificates를 호출하면 다시 시작하지 않고 새 인증서를 설치할 수 있습니다. 새 TLS 핸드셰이크는 새 인증서를 사용하며, 이미 열려 있는 연결은 닫힐 때까지 이전 인증서로 계속 동작합니다. 인증서 및 키 파일을 그 자리에서 덮어쓰거나, SSLOptions.CertFile, KeyFile, RootCertFile 및 Password에 새 값을 할당한 다음 ReloadCertificates를 호출하십시오. 서버가 활성 상태인 동안 어느 스레드에서든 호출할 수 있습니다. 서버가 활성 상태가 아니거나 SSL이 비활성화된 경우에는 아무 작업도 하지 않습니다. 새 인증서와 개인 키는 아무것도 변경되기 전에 로드되고 검사됩니다(키는 인증서와 일치해야 합니다). 검사에 실패하면 예외가 발생하고 서버는 이전 인증서를 계속 제공합니다. 인증서만 다시 로드됩니다. 나머지 SSLOptions(암호 목록, TLS 버전 등)와 OnSSLAfterCreateHandler에서 변경한 내용은 실행 중인 값을 유지하므로, 이를 변경하려면 여전히 재시작이 필요합니다. 지원되는 TLS 백엔드는 OpenSSL(연결당 스레드, Windows의 IOCP 및 Linux의 EPOLL), SChannel 및 sgc 네이티브 TLS(스레드 및 IOCP/EPOLL)입니다. IOCP/EPOLL 엔진에 연결된 사용자 정의 TLS Provider는 DoCreateTLSContext를 통해 다시 로드됩니다. 기본(stock) Indy(sgc Indy 포크가 아님)에서는 기존 OpenSSL 핸들러가 다시 로드할 수 없으며 ReloadCertificates는 "not supported" 예외를 발생시킵니다. 네이티브 TLS에서는 다시 로드하기 전에 발급된 TLS 세션 티켓이 이후에 재개되지 않으므로, 클라이언트는 단순히 전체 핸드셰이크를 수행합니다. Secure Connections을(를) 참조하십시오.
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;