TLS pour PowerAdmin
===================

Nous allons configurer nginx pour activer TLS.

.. code-block:: bash

    dnf install -y certbot
    certbot --version

Nous allons devoir configurer nginx pour livrer un fichier utilisable par certbot.

.. code-block:: bash

    mkdir -p /var/www/acme/.well-known/acme-challenge
    chown -R root:root /var/www/acme

Le fichier nginx pour livrer la conf ``/etc/nginx/conf.d/certbot.conf``, et aussi rediriger vers le https.

.. code-block::

    server {
        listen 80;
        listen [::]:80;
        server_name _;

        location ^~ /.well-known/acme-challenge/ {
            root /var/www/acme;
            default_type "text/plain";
        }

        location / { return 301 https://$host$request_uri; }
    }

Nous allons rapidement desactiver le backend poweradmin pour generer le premier certificat.

.. code-block:: bash

    mv /etc/nginx/conf.d/poweradmin.conf /etc/nginx/conf.d/poweradmin.conf.disable
    systemctl restart nginx

Et donc nous pouvons generer le premier certificat.

.. code-block:: bash

    certbot certonly \
      --webroot -w /var/www/acme \
      -d galaxy.as51144.net \
      --key-type ecdsa \
      --agree-tos -m noc@g3e.fr \
      --no-eff-email

Maintenant que le certificat est genere, nous allons pouvoir activer le TLS sur le backend
``/etc/nginx/conf.d/poweradmin.conf``.

.. code-block:: bash

    mv /etc/nginx/conf.d/poweradmin.conf.disable /etc/nginx/conf.d/poweradmin.conf

Dans ``/etc/nginx/conf.d/poweradmin.conf``, remplacer les lignes deja ecrites et ajouter les autres.

.. code-block::

    listen 443 ssl;
    server_name galaxy.as51144.net;
    root /var/www/poweradmin;
    index index.php;

    ssl_certificate     /etc/letsencrypt/live/galaxy.as51144.net/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/galaxy.as51144.net/privkey.pem;
    ssl_protocols       TLSv1.2 TLSv1.3;
    ssl_session_cache   shared:SSL:10m;

    add_header Strict-Transport-Security "max-age=63072000" always;
    add_header X-Frame-Options DENY always;
    add_header X-Content-Type-Options nosniff always;

.. code-block:: bash

    systemctl restart nginx

Si jusqu'a present tout s'est bien passe, nous allons juste faire la derniere etape : le renouvellement
automatique du certificat.

.. code-block:: bash

    mkdir -p /etc/letsencrypt/renewal-hooks/deploy

    cat > /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh <<'EOF'
    #!/bin/sh
    systemctl reload nginx
    EOF
    chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh
    systemctl enable --now certbot-renew.timer
    systemctl list-timers certbot-renew.timer
