How CasaOS Configures HTTPS with Certificate and Key Files: A Complete Guide
CasaOS enables HTTPS by reading the CertFile and KeyFile paths from the [scheme] section of /etc/casaos/casaos.conf and passing them to the Go standard library’s ListenAndServeTLS during gateway initialization.
CasaOS, the open-source home cloud platform developed by IceWhaleTech, secures its API endpoints through a structured TLS configuration system defined in the Go source code. By modifying the INI-style configuration file and providing PEM-encoded certificate files, administrators can encrypt all traffic to the internal gateway. Understanding how CasaOS configures HTTPS with certificate and key files requires examining the Scheme struct definition, the configuration loading sequence, and the server initialization logic.
HTTPS Configuration Model in CasaOS
The Scheme Struct Definition
In internal/conf/config.go, CasaOS defines a Scheme struct that encapsulates all HTTPS-related settings. This struct contains three critical fields that control TLS behavior:
Https: A boolean flag that toggles TLS mode on or offCertFile: Absolute path to the PEM-encoded TLS certificate fileKeyFile: Absolute path to the PEM-encoded private key matching the certificate
According to the IceWhaleTech/CasaOS source code, these fields map directly to the [scheme] section in the configuration file.
Configuration File Location
CasaOS reads these values from /etc/casaos/casaos.conf, an INI-formatted configuration file. The [scheme] section maps to the global AppInfo.Scheme variable, making the certificate paths available throughout the application lifecycle.
Loading and Mapping Configuration Values
InitSetup Function in pkg/config/init.go
During startup, the InitSetup function in pkg/config/init.go loads the configuration file using ini.Load() and maps the [scheme] section to the global configuration object.
// pkg/config/init.go
Cfg, err = ini.Load(ConfigFilePath)
// ...
mapTo("scheme", &AppInfo.Scheme)
This process populates config.AppInfo.Scheme.CertFile and config.AppInfo.Scheme.KeyFile with the paths specified in the configuration file.
Starting the HTTPS Server
TLS Initialization in the Gateway
When Scheme.Https evaluates to true, the gateway component creates an http.Server with TLS configuration and calls ListenAndServeTLS, passing the certificate and key file paths from the configuration.
tlsConfig := &tls.Config{
MinVersion: tls.VersionTLS12,
}
srv := &http.Server{
Addr: fmt.Sprintf(":%d", config.ServerInfo.HttpsPort),
Handler: mux,
TLSConfig: tlsConfig,
}
srv.ListenAndServeTLS(config.AppInfo.Scheme.CertFile, config.AppInfo.Scheme.KeyFile)
If Https is false or the CertFile and KeyFile entries are empty, CasaOS starts a plain HTTP server instead, as implemented in main.go.
Step-by-Step HTTPS Configuration
Enable HTTPS in casaos.conf
To configure CasaOS with certificate and key files:
- Edit
/etc/casaos/casaos.confand locate the[scheme]section - Set
Https = trueto enable TLS mode - Specify absolute paths for
CertFileandKeyFilepointing to valid PEM files - Restart the CasaOS service to apply the changes
Example Configuration
Minimal [scheme] section for /etc/casaos/casaos.conf:
[scheme]
Https = true
CertFile = /etc/casaos/ssl/casaos.crt
KeyFile = /etc/casaos/ssl/casaos.key
The conf/casaos.conf.sample file in the repository provides a template for adding this section.
Programmatic TLS Check
The server initialization code checks the Https flag before deciding between TLS and plain HTTP:
if config.AppInfo.Scheme.Https {
err = srv.ListenAndServeTLS(
config.AppInfo.Scheme.CertFile,
config.AppInfo.Scheme.KeyFile,
)
} else {
err = srv.Serve(listener)
}
if err != nil && err != http.ErrServerClosed {
log.Fatalf("server error: %v", err)
}
Summary
- The
Schemestruct ininternal/conf/config.godefines the HTTPS configuration model withHttps,CertFile, andKeyFilefields - Configuration values are loaded from
/etc/casaos/casaos.confvia theInitSetupfunction inpkg/config/init.go - When enabled, CasaOS passes certificate paths to
ListenAndServeTLSusing Go's standard library TLS implementation - HTTPS requires valid PEM-encoded certificate and key files with absolute paths specified in the
[scheme]section - If certificate paths are missing or invalid while
Httpsis enabled, the server will fail to start
Frequently Asked Questions
Where does CasaOS store its HTTPS configuration?
CasaOS stores HTTPS settings in the /etc/casaos/casaos.conf file under the [scheme] section. This INI-formatted file maps to the Scheme struct defined in internal/conf/config.go, containing the Https boolean flag and paths for CertFile and KeyFile.
What file format does CasaOS expect for SSL certificates?
CasaOS expects PEM-encoded certificate and key files. The CertFile path should point to a PEM-encoded TLS certificate, while KeyFile should point to the matching unencrypted private key. The system passes these paths directly to Go's ListenAndServeTLS function.
Does CasaOS support automatic HTTPS certificate generation?
No, according to the source code analysis, CasaOS does not implement automatic certificate generation. Administrators must provide pre-existing certificate files and specify their paths in the configuration file. The system only reads existing files via the standard ListenAndServeTLS implementation.
What happens if the certificate files are missing or invalid?
If Https is set to true but the certificate files are missing, invalid, or the paths are incorrect, the ListenAndServeTLS call will fail and CasaOS will log a fatal error during startup. If Https is false or the paths are empty, CasaOS starts a plain HTTP server instead.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →