Vous pouvez crypter vos connexions à votre instance axe DevTools Linter sur site (et empêcher l'attaque de l'homme du milieu) en utilisant un serveur proxy inverse tel que NGINX. Ce guide vous montre comment procéder.
Prérequis
Ce guide suppose que vous effectuerez l'installation sur une machine Linux.
Vous aurez besoin des logiciels suivants :
- Binaire axe DevTools Linter sur site
- NGINX
- OpenSSL (pour créer des certificats auto-signés)
Pour obtenir de l'aide sur l'installation de NGINX, consultez Installer | NGINX.
Pour plus d'informations sur l'installation du serveur axe DevTools Linter sur site, consultez Configuration du serveur sur site.
Vous aurez besoin d'OpenSSL pour créer des certificats auto-signés. Pour plus d'informations sur OpenSSL, voir OpenSSL.
Configuration de NGINX
Vous pouvez créer un fichier de configuration et le placer dans le répertoire /etc/nginx/config.d . Pour cet exemple, créez un fichier de configuration nommé axe-linter.conf et placez-le dans le répertoire /etc/nginx/config.d . La configuration ci-dessous est un exemple de configuration de NGINX en tant que proxy inverse :
server {
listen 443 ssl;
listen [::]:443 ssl;
# Configure SSL.
# Replace `/opt/deque/cert/axe.crt` and `/opt/deque/cert/axe.key`
# with your own key files.
ssl_certificate /opt/deque/axe/certs/axe.crt;
ssl_certificate_key /opt/deque/axe/certs/axe.key;
server_name _;
# Redirect all requests to axe DevTools Linter
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_cache_bypass $http_upgrade;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Vous aurez besoin de deux fichiers de certificat SSL comme indiqué par les options ssl_certificate et ssl_certificate_key dans la configuration ci-dessus.
Dans l'exemple ci-dessus, les requêtes adressées à ce serveur NGINX sont transmises à un serveur axe DevTools Linter sur localhost (127.0.0.1) au port 3000.
Après avoir modifié la configuration, redémarrez NGINX comme indiqué ci-dessous :
sudo service nginx restart
Configuration du DNS
Un certificat SSL est désormais requis sur votre serveur puisque vous utilisez des connexions cryptées. Si le serveur a un nom enregistré dans le DNS (en tant qu'enregistrement DNS A, par exemple), vous pouvez utiliser un service tel que Let's Encrypt pour générer des certificats gratuits. Si vous souhaitez accéder à votre serveur via son adresse IP uniquement, vous devez créer un certificat auto-signé car un service tel que Let's Encrypt n'émettra pas de certificats pour les adresses IP : il nécessite que le serveur soit enregistré auprès d'un serveur DNS.
Utilisation d'un certificat auto-signé
Pour les serveurs accessibles via leur adresse IP uniquement, la première étape consiste à créer les certificats auto-signés avec OpenSSL comme indiqué ci-dessous :
openssl req -newkey rsa:2048 -x509 -nodes -keyout /etc/ssl/private/axe-selfsigned.key -new -out /etc/ssl/certs/axe-selfsigned.crt -subj /CN=axe-linter-server -reqexts SAN -extensions SAN -config <(cat /etc/ssl/openssl.cnf <(printf '[SAN]\nsubjectAltName=IP:10.10.1.50')) -sha256 -days 365
Dans la commande ci-dessus, vous devez remplacer l'adresse IP par celle de votre serveur (dans l'exemple, elle est définie sur 10.10.1.50), et vous devrez modifier les chemins de certificat dans votre fichier de configuration dans /etc/nginx/config.d pour pointer vers /etc/ssl/private/axe-selfsigned.key et /etc/ssl/certs/axe-selfsigned.crt.
Le certificat créé n'est valable qu'un an (option -days 365 ), mais vous pouvez le modifier pour une durée plus longue.
Utilisation d'axe DevTools Linter Connector avec des certificats auto-signés
Vous devrez copier le certificat sur la machine cliente (dans cet exemple, le fichier axe-selfsigned.crt) afin que votre code client ou axe DevTools Linter Connector puisse utiliser le certificat.
Vous devrez ensuite configurer les variables d'environnement comme indiqué dans Configuration des variables d'environnement
L'exemple suivant montre comment utiliser axe DevTools Linter avec un certificat signé par vous-même :
NODE_EXTRA_CA_CERTS=/path/to/downloaded/axe-selfsigned.crt axe-linter-connector -s . -d .
La variable d'environnement NODE_EXTRA_CA_CERTS indique à node et donc à axe DevTools Linter d'accepter le certificat auto-signé spécifié, qui serait normalement rejeté, comme indiqué ci-dessous :
axe-linter-connector -s . -d .
Error: self signed certificate
at TLSSocket.onConnectSecure (_tls_wrap.js:1502:34)
at TLSSocket.emit (events.js:314:20)
at TLSSocket._finishInit (_tls_wrap.js:937:8)
at TLSWrap.ssl.onhandshakedone (_tls_wrap.js:711:12)
Configuration des variables d'environnement
Pour utiliser axe DevTools Linter avec un serveur proxy inverse, vous devez modifier ses deux variables d'environnement :
- AXE_LINTER_SERVER_URL
- AXE_LINTER_SERVER_PORT
Par exemple, vous pouvez définir les variables comme indiqué ci-dessous :
export AXE_LINTER_SERVER_URL=https://10.10.1.50
export AXE_LINTER_SERVER_PORT=443
L'URL doit commencer par https et le port doit être 443 sinon vous ne pourrez pas vous connecter à votre serveur.
Blocage du port non crypté dans votre pare-feu
Vous pouvez envisager de bloquer le port attribué à votre serveur axe DevTools Linter (ici, le port 3000) pour le trafic extérieur afin d'être sûr que toutes les connexions passent par le serveur proxy.