Configurer l’authentification par Certificat sur le Client

Nouveau dans la version 1.7: Enterprise

Indice

Cette fonctionnalité n’est disponible qu’en version Enterprise de WAPT.

Si votre entreprise a besoin d’un serveur WAPT ouvert sur Internet, il peut être securisé grâce à l”authentification par Certificat sur le Client.

Cette configuration restreint la visibilité du serveur WAPT aux clients enregistrés uniquement. Cela se base sur la clé privée de l’agent généré lors de son enregistrement. Il marche comme ce qui suit:

  • l’agent WAPT envoie un CSR au serveur WAPT que ce dernier va signer et renvoyer à l’agent WAPT;

  • en utilisant le certificat signé, l’agent peut accéder à l’arborescence protégée du serveur web Nginx;

Note

Nous vous recommandons d’activer Kerberos ou bien l’enregistrement par identifiant / mot de passe dans le post-configuration du serveur WAPT.

Activer l’authentification par Certificat sur le Client

  • assurez-vous de désactiver les en-têtes personnalisées relatives aux résultats de l’authentification côté client lorsque les demandes sont passées au proxy sans être vérifiées par le module ssl de nginx. Ces en-têtes sont jugées fiables par le waptserver si X-Ssl-Authenticated est marqué SUCCESS et que le paramètre waptserver.ini use_ssl_client_auth est réglé sur True :

    location / {
        ...
        proxy_set_header X-Ssl-Authenticated "";
        proxy_set_header X-Ssl-Client-DN "";
    
  • Ajoutez une configuration Nginx dans le fichier /etc/nginx/certificate-auth.conf. Ce fichier est utilisé pour restreindre l’accès aux actions propres au Certificat d’Authentification:

    proxy_set_header X-Ssl-Authenticated $ssl_client_verify;
    proxy_set_header X-Ssl-Client-DN $ssl_client_s_dn;
    if ($ssl_client_verify != SUCCESS) {
        return 401;
    }
    

Exemple d’un fichier de configuration:

server {
    listen                      80;
    listen                      443 ssl;
    server_name                 _;

    ssl_certificate             "/opt/wapt/waptserver/ssl/cert.pem";
    ssl_certificate_key         "/opt/wapt/waptserver/ssl/key.pem";
    ssl_protocols               TLSv1.2;
    ssl_dhparam                 /etc/ssl/certs/dhparam.pem;
    ssl_prefer_server_ciphers   on;
    ssl_ciphers                 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
    ssl_stapling                on;
    ssl_stapling_verify         on;
    ssl_session_cache           none;
    ssl_session_tickets         off;

    gzip_min_length     1000;
    gzip_buffers        4 8k;
    gzip_http_version   1.0;
    gzip_disable        "msie6";
    gzip_types          text/plain text/css application/json;
    gzip_vary           on;

    ssl_client_certificate "/opt/wapt/conf/wapt-serverauth-ca.crt";
    ssl_verify_client optional;

    index index.html;

    location /static {
        alias "/opt/wapt/waptserver/static";
    }

    location / {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        # be sure we ignore these headers if they are coming from clients
        proxy_set_header X-Ssl-Client-Dn  "";
        proxy_set_header X-Ssl-Authenticated  "";

        client_max_body_size 4096m;
        client_body_timeout 1800;

        location ~ ^/(wapt|wapt-host|waptwua)/(.*)$ {
            proxy_set_header Cache-Control "store, no-cache, must-revalidate, post-check=0, pre-check=0";
            proxy_set_header Pragma "no-cache";
            proxy_set_header Expires "Sun, 19 Nov 1978 05:00:00 GMT";

            include /etc/nginx/certificate-auth.conf;

            rewrite ^/(wapt|wapt-host|waptwua)/(.*)$ /$1/$2 break;
            root "/var/www";
        }

        # kerberos auth
        location /add_host_kerberos {
            auth_gss on;
            auth_gss_keytab  /etc/nginx/http-krb5.keytab;
            proxy_pass http://127.0.0.1:8080;
        }

        # basic auth
        location ~ ^/(add_host|ping)$ {
            proxy_pass http://127.0.0.1:8080;
        }

        location /wapt-host/Packages {
                return 403;
        }

        location / {
            include /etc/nginx/certificate-auth.conf;
            proxy_pass http://127.0.0.1:8080;

        }

        location /socket.io {
            include /etc/nginx/certificate-auth.conf;
            proxy_http_version 1.1;
            proxy_buffering off;

            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "Upgrade";
            proxy_pass http://127.0.0.1:8080/socket.io;

        }
    }

}

Attention

Soyez prudent, en date du 2020-06-12, WAPT ne supporte pas les CRL, ce qui signifie que lorsque vous supprimez une machine dans la console WAPT, la machine pourra toujours accéder au répertoire WAPT.