hbouma wrote:however, nothing in this document appears to be turning off non-SSL traffic.
Yes it does. It's on page 7:
Add the following lines to the end of the file (press SHIFT + G):
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule nagiosxi/api/v1/(.*)$ /usr/local/nagiosxi/html/api/v1/index.php?request=$1 [QSA,NC,L]
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</IfModule>
That last rewriterule forces traffic to use HTTPS.
For a more permanent solution, you'll want to enable HSTS on your server as well:
Code: Select all
Header always set Strict-Transport-Security "max-age=63072000"
Securing your SSL configuration
The document is not exhaustive, and it's hard to get SSL correct unless you know what you're doing. There are other things to do to secure your server such as enabling HSTS, enabling SSL stapling, turning off SSL session tickets, disabling insecure protocols such as SSLv3, and turning off insecure cipher suites -- none of which the document covers.
Instead, I'd use
Mozilla's tool to generate an appropriate Apache configuration for the level of security you need, and use those values instead of those listed in the document. The document can help you plug them into your Apache configuration. Here's an example output from it:
Code: Select all
# generated 2021-02-16, Mozilla Guideline v5.6, Apache 2.4.41, OpenSSL 1.1.1d, intermediate configuration
# https://ssl-config.mozilla.org/#server=apache&version=2.4.41&config=intermediate&openssl=1.1.1d&guideline=5.6
# this configuration requires mod_ssl, mod_socache_shmcb, mod_rewrite, and mod_headers
<VirtualHost *:80>
RewriteEngine On
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>
<VirtualHost *:443>
SSLEngine on
# curl https://ssl-config.mozilla.org/ffdhe2048.txt >> /path/to/signed_cert_and_intermediate_certs_and_dhparams
SSLCertificateFile /path/to/signed_cert_and_intermediate_certs_and_dhparams
SSLCertificateKeyFile /path/to/private_key
# enable HTTP/2, if available
Protocols h2 http/1.1
# HTTP Strict Transport Security (mod_headers is required) (63072000 seconds)
Header always set Strict-Transport-Security "max-age=63072000"
</VirtualHost>
# intermediate configuration
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder off
SSLSessionTickets off
SSLUseStapling On
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"
A good utility to test how secure your SSL certificate, and show device compatibility, is here:
https://www.ssllabs.com/ssltest/