introduction
J'ai un serveur de développement (fonctionnant actuellement sous Ubuntu 14.04 LTS), que j'utilise depuis un certain temps maintenant pour héberger divers outils de développement sur différents ports. Comme les ports peuvent être difficiles à retenir, j'ai décidé d'utiliser le port 80 pour tous mes services et d'effectuer la redirection de port en interne, en fonction du nom d'hôte.
Au lieu d'écrire domain.com:5432, je peux simplement y accéder via sub.domain.com
Par exemple, l'application X, qui utilise le port 7547 et s'exécute sur sub.domain.com, présente la configuration nginx suivante:
upstream sub {
server 127.0.0.1:7547;
}
server {
listen 80;
server_name sub.domain.com www.sub.domain.com;
access_log /var/log/nginx/sub.log combined;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:7547;
proxy_set_header Authorization "";
}
}
La question
Compte tenu de la structure de configuration actuelle, que j'ai choisie, est-il possible d'utiliser letCrypt et d'exécuter les différents services sous https?
la source
Réponses:
Oui, vous pouvez avoir des requêtes proxy nginx sur des serveurs HTTP, puis répondre aux clients via HTTPS. Ce faisant, vous voudrez vous assurer qu'il est peu probable que la connexion proxy nginx <-> soit détectée par tout attaquant attendu. Les approches suffisamment sûres pourraient inclure:
La procuration auprès d'un autre hôte sur l'Internet public ne sera probablement pas assez sûre.
Voici les instructions pour obtenir un certificat Let's Encrypt en utilisant le même serveur Web que celui que vous utilisez en tant que proxy.
Demander votre certificat initial à Let's Encrypt
Modifiez votre
server
clause pour permettre au sous-répertoire.well-known
d'être servi à partir d'un répertoire local, par exemple:http://sub.domain.com/.well-known
C’est là que les serveurs de Let's Encrypt chercheront les réponses aux défis qu’il soulève.Vous pouvez ensuite utiliser le client certbot pour demander un certificat à Let's Encrypt en utilisant le plugin webroot (en tant que root):
Votre clé, votre certificat et votre chaîne de certificats seront désormais installés dans
/etc/letsencrypt/live/sub.domain.com/
Configurer nginx pour utiliser votre certificat
Commencez par créer une nouvelle clause de serveur comme ceci:
Recharger nginx:
Vérifiez que le protocole HTTPS fonctionne maintenant en visitant
https://sub.domain.com
ethttps://www.sub.domain.com
dans votre navigateur (et tous les autres navigateurs que vous souhaitez spécifiquement à l' appui) et vérifier qu'ils ne signalent pas les erreurs de certificat.Recommandé: consultez également raymii.org: sécurité SSL renforcée sur nginx et testez votre configuration dans les laboratoires SSL .
(Recommandé) Rediriger les requêtes HTTP vers HTTPS
Une fois que vous avez confirmé que votre site fonctionne avec la
https://
version de l'URL, redirigez-le vers un contenu non sécurisé, carhttp://sub.domain.com
redirigez-le vers un contenu non sécurisé car redirigez-le vers la version HTTPS du site.Remplacez l'intégralité de votre
server
clause du port 80 par:Vous devez également maintenant supprimer la mise en commentaire de cette ligne dans la configuration du port 443, afin que les navigateurs se souviennent de ne même pas essayer la version HTTP du site:
Renouveler automatiquement votre certificat
Vous pouvez utiliser cette commande (en tant que root) pour renouveler tous les certificats connus de certbot et recharger nginx à l'aide du nouveau certificat (qui aura le même chemin que votre certificat existant):
certbot essaiera uniquement de renouveler les certificats datant de plus de 60 jours. Il est donc prudent (et recommandé!) d'exécuter cette commande très régulièrement , et automatiquement si possible. Par exemple, vous pouvez mettre la commande suivante dans
/etc/crontab
:Vous pouvez tester les renouvellements avec une exécution à sec, qui contactera les serveurs de transfert Let's Encrypt pour faire un test réel de contact avec votre domaine, mais ne stockera pas les certificats résultants:
Ou vous pouvez forcer un renouvellement anticipé avec:
Remarque: vous pouvez exécuter le test autant de fois que vous le souhaitez, mais les vrais renouvellements sont soumis aux limites de débit de Let's Encrypt .
la source
certbot
ou tout autre outil, vous ne pouvez pas oublier de spécifier votre domaine au format www et non-www pour fonctionner.location /.well-known
, vous devez laisser.well-known
dehors dans le chemin. Utilisezalias /var/www/sub.domain.com
, pasalias /var/www/sub.domain.com/.well-known
location '/.well-known' {
. Je ne sais pas s'il s'agit d'une version ou de ma configuration, mais au cas où quelqu'un d'autre serait bloqué.Oui, vous pouvez utiliser
nginx
comme point final de https et coopérer avec les backends via http. Par exemple ma config:Mais comme je le sais, avec le cryptage, vous devez pointer tous les sous-domaines lorsque vous obtenez un certificat, et si cela pose un problème, vous choisissez alors l’URL
https://host/service
au lieu dehttps://service.host
la source