Si on veut curl une ressource sur l'ip (car pas de résolution, pas envie de modifier /etc/hosts..)
On va utiliser -H pour rajouter un header host et arriver sur le bon virtualhost :
curl -H 'Host: www.foo.com' http://192.168.1.1/
Si la ressource est en https, ça ne passe pas :
curl -H 'Host: www.foo.com' https://192.168.1.1/
curl: (51) SSL: certificate subject name (*.foo.com) does not match target host name '192.168.1.1'
Car le SNI hello se fait avec l'host dans l'url (192.168.1.1) et non pas avec le Header Host
Un workaround est d'utiliser l'option --resolve
curl --resolve www.foo.com:192.168.1.1 https://www.foo.com
On peut aussi utiliser --insecure pour ignore l'erreur mais on ne valide pas que le certificat est ok :
curl --insecure -H 'Host: www.foo.com' http://192.168.1.1/
Cela permet au serveur de présenter plusieurs certificats pour la même adresse IP
Lorsqu'un client initie une connexion TLS, il demande un certificat électronique au serveur web ; une fois que le serveur a renvoyé le certificat, le client l'examine et compare le nom de domaine qu'il essaye de joindre avec le ou les noms inclus dans le certificat. Si une correspondance est trouvée, la connexion continue comme d'habitude. Sinon, l'utilisateur est généralement prévenu d'un problème et la connexion est alors interrompue, puisqu'un tel problème peut signaler une tentative d'attaque de l'homme du milieu. Cependant, certaines applications autorisent l'utilisateur à passer outre l'avertissement, et se connecter tout de même, l'utilisateur prenant alors seul la responsabilité de la confiance envers le certificat concerné.