Creare un Catch-all SSL server per NGINX con Ansible

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.

- hosts: webserver2004
  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:

server {
    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;

}

Tags