Ormai SSL è diventato un obbligo ma se gestisci in autonomia un server WEB prima o poi ti scontri con questi due problemi:
- Gli utenti atterrano sul tuo server per domini/siti che non gestisci più
- Gli utenti usano HTTPS per siti su cui tu non hai attivato SSL
In entrambi i casi NGINX consegna loro un contenuto che non è quello corretto, perche infatti NGINX consegna il contenuto del primo server/vhost SSL in ordine alfabetico.
Fortunatamente è possibile costruirsi come per HTTP un server di Catch-All che cattura tutti i domini inesistenti per il protocollo HTTPS (risolvendo entrambi i problemi sopra)
La ricetta per costruirlo con ansible è la seguente, ricordiamo però che per permettere che l'utente riceva una risposta dal nostro server il protocollo HTTPS impone che la connesione sia su canale sicuro quindi saremo costretti a generare dei certificati affinchè il tutto possa funzionare.
become: yes
tasks:
- name: Create private key (RSA, 4096 bits)
community.crypto.openssl_privatekey:
path: /etc/ssl/private/server.key
- name: Create certificate signing request (CSR) for self-signed cert
community.crypto.openssl_csr_pipe:
privatekey_path: /etc/ssl/private/server.key
common_name: localhost
organization_name: Self-signed certificate
subject_alt_name:
- "IP:94.177.223.126"
register: csr
- name: Create self-signed certificate from CSR
community.crypto.x509_certificate:
path: /etc/ssl/private/server.crt
csr_content: "{{ csr.csr }}"
privatekey_path: /etc/ssl/private/server.key
provider: selfsigned
Il file di configurazione di NGINX (aaa_default_ssl.conf) da usare è questo qui sotto:
listen 443 default_server ssl;
ssl_certificate /etc/ssl/private/server.crt;
ssl_certificate_key /etc/ssl/private/server.key;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
}
- Accedi per poter commentare