# Enabling HTTPS (SSL/TLS) for daloRADIUS This guide walks you through the process of enabling HTTPS on a daloRADIUS installation running on **Apache 2**. It assumes you installed daloRADIUS using the `setup/install.sh` script or followed the manual installation procedure described in the [Debian installation guide](../install/INSTALL.debian.md). daloRADIUS is a standard PHP web application — it does not include any built-in SSL/TLS configuration. HTTPS is configured entirely at the Apache level, the same way you would for any other web application. ## Prerequisites Before proceeding, ensure the following: 1. daloRADIUS is installed and accessible over HTTP. 2. You have **root** (or sudo) access to the server. 3. Apache 2 is running and serving the operators and users virtual hosts. 4. You have a valid SSL certificate and private key, **or** you intend to generate a self-signed certificate for testing (see [Step 2](#2-obtain-an-ssl-certificate)). ## 1. Enable the Apache SSL Module The `ssl` module is required for Apache to handle HTTPS connections. Enable it by running: ```bash sudo a2enmod ssl ``` ## 2. Obtain an SSL Certificate You need an SSL certificate and its corresponding private key. Choose one of the two approaches below depending on your environment. ### Option A — Self-Signed Certificate (Testing Only) A self-signed certificate is suitable for development or internal testing. It will trigger a browser security warning because it is not signed by a trusted Certificate Authority. Generate a self-signed certificate valid for 365 days: ```bash sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout /etc/ssl/private/daloradius.key \ -out /etc/ssl/certs/daloradius.crt \ -subj "/CN=daloradius.example.org" ``` Set appropriate permissions on the private key: ```bash sudo chmod 600 /etc/ssl/private/daloradius.key ``` ### Option B — Certificate from a Certificate Authority (Production) For a production environment, obtain a certificate from a trusted authority such as [Let's Encrypt](https://letsencrypt.org/) or a commercial provider. Place the resulting files in standard locations: | File | Recommended Path | |------|-----------------| | Certificate | `/etc/ssl/certs/daloradius.crt` | | Private Key | `/etc/ssl/private/daloradius.key` | | CA Chain (if applicable) | `/etc/ssl/certs/daloradius-chain.crt` | If your CA provides an intermediate chain file, you will also need the `SSLCertificateChainFile` directive in your virtual host configuration (see Step 4). ## 3. Update the Port Configuration The install script defines port variables at the bottom of `/etc/apache2/envvars`. Update them to use HTTPS ports: ```bash # daloRADIUS users interface port export DALORADIUS_USERS_PORT=443 # daloRADIUS operators interface port export DALORADIUS_OPERATORS_PORT=8443 ``` Make sure your `/etc/apache2/ports.conf` reflects these ports. If you followed the standard installation, it already reads from the environment variables: ```apache Listen ${DALORADIUS_USERS_PORT} Listen ${DALORADIUS_OPERATORS_PORT} ``` No changes to `ports.conf` should be necessary unless you customized it. ## 4. Update the Virtual Host Files Edit each virtual host to enable SSL and point to your certificate files. ### `/etc/apache2/sites-available/operators.conf` ```apache ServerAdmin ${DALORADIUS_SERVER_ADMIN} DocumentRoot ${DALORADIUS_ROOT_DIRECTORY}/app/operators SSLEngine on SSLCertificateFile /etc/ssl/certs/daloradius.crt SSLCertificateKeyFile /etc/ssl/private/daloradius.key # SSLCertificateChainFile /etc/ssl/certs/daloradius-chain.crt Options -Indexes +FollowSymLinks AllowOverride All Require all granted Require all denied ErrorLog ${APACHE_LOG_DIR}/daloradius/operators/error.log CustomLog ${APACHE_LOG_DIR}/daloradius/operators/access.log combined ``` ### `/etc/apache2/sites-available/users.conf` ```apache ServerAdmin ${DALORADIUS_SERVER_ADMIN} DocumentRoot ${DALORADIUS_ROOT_DIRECTORY}/app/users SSLEngine on SSLCertificateFile /etc/ssl/certs/daloradius.crt SSLCertificateKeyFile /etc/ssl/private/daloradius.key # SSLCertificateChainFile /etc/ssl/certs/daloradius-chain.crt Options -Indexes +FollowSymLinks AllowOverride None Require all granted Require all denied ErrorLog ${APACHE_LOG_DIR}/daloradius/users/error.log CustomLog ${APACHE_LOG_DIR}/daloradius/users/access.log combined ``` > **Note:** Uncomment the `SSLCertificateChainFile` line and provide the correct path if your Certificate Authority supplied a chain or intermediate certificate file. ## 5. Restart Apache Apply all changes by restarting the Apache service: ```bash sudo systemctl restart apache2 ``` If the restart fails, check the configuration syntax first: ```bash sudo apachectl configtest ``` ## 6. Verify the Configuration Once Apache has restarted, verify that HTTPS is working: 1. **User Portal**: Open `https://your-server-address` in a web browser (port 443). 2. **Operators Interface**: Open `https://your-server-address:8443` in a web browser. Replace `your-server-address` with the domain name or IP address of your server. If you used a self-signed certificate, your browser will display a security warning. This is expected — you can proceed by accepting the risk or adding an exception. ## Troubleshooting | Symptom | Possible Cause | Resolution | |---------|---------------|------------| | Apache fails to start | Port conflict or syntax error | Run `sudo apachectl configtest` and check for errors. Verify no other service is using ports 443 or 8443. | | Browser shows `ERR_SSL_PROTOCOL_ERROR` | `SSLEngine on` missing or `ssl` module not enabled | Confirm `sudo a2enmod ssl` was run and that the virtual host includes `SSLEngine on`. | | Browser shows certificate warning | Self-signed certificate or domain mismatch | Use a CA-signed certificate for production. Ensure the certificate's CN or SAN matches the server domain. | | `AH02572: Failed to configure at least one certificate` | Incorrect file paths for certificate or key | Verify the paths in `SSLCertificateFile` and `SSLCertificateKeyFile` point to existing files. | ## Additional Notes - If you used a different installation method (manual setup, Docker, etc.), the file locations and port configuration may differ. Adapt the instructions accordingly. ## References - [Apache SSL/TLS How-To](https://httpd.apache.org/docs/2.4/ssl/ssl_howto.html) - [mod_ssl Documentation](https://httpd.apache.org/docs/2.4/mod/mod_ssl.html) - [Let's Encrypt — Getting Started](https://letsencrypt.org/getting-started/)