feat(server): implement tls certificate hot-reload

This commit is contained in:
Jacky 2025-04-04 17:22:50 +08:00
parent 269397e114
commit de1860718e
No known key found for this signature in database
GPG key ID: 215C21B10DF38B4D
4 changed files with 64 additions and 11 deletions

21
main.go
View file

@ -1,11 +1,13 @@
package main
import (
"crypto/tls"
"errors"
"fmt"
"net/http"
"time"
"github.com/0xJacky/Nginx-UI/internal/cert"
"github.com/0xJacky/Nginx-UI/internal/cmd"
"github.com/0xJacky/Nginx-UI/internal/kernel"
"github.com/0xJacky/Nginx-UI/model"
@ -56,12 +58,23 @@ func Program(confPath string) func(state overseer.State) {
}
var err error
if cSettings.ServerSettings.EnableHTTPS {
// Convert SSL certificate and key paths to absolute paths if they are relative
sslCert := cSettings.ServerSettings.SSLCert
sslKey := cSettings.ServerSettings.SSLKey
// Load TLS certificate
err = cert.LoadServerTLSCertificate()
if err != nil {
logger.Fatalf("Failed to load TLS certificate: %v", err)
return
}
tlsConfig := &tls.Config{
GetCertificate: func(clientHello *tls.ClientHelloInfo) (*tls.Certificate, error) {
return cert.GetServerTLSCertificate()
},
}
srv.TLSConfig = tlsConfig
logger.Info("Starting HTTPS server")
err = srv.ServeTLS(state.Listener, sslCert, sslKey)
err = srv.ServeTLS(state.Listener, "", "")
} else {
logger.Info("Starting HTTP server")
err = srv.Serve(state.Listener)