Je veux forcer la vérification du client SSL pour l'un de mes hôtes virtuels. Mais obtenez l'erreur "Aucun certificat SSL requis n'a été envoyé", en essayant d'en obtenir quelque chose.
Voici mes configurations de test:
# defaults
ssl_certificate /etc/certs/server.cer;
ssl_certificate_key /etc/certs/privkey-server.pem;
ssl_client_certificate /etc/certs/allcas.pem;
server {
listen 1443 ssl;
server_name server1.example.com;
root /tmp/root/server1;
ssl_verify_client off;
}
server {
listen 1443 ssl;
server_name server2.example.com;
root /tmp/root/server2;
ssl_verify_client on;
}
Le premier serveur répond avec 200 codes http, mais le second renvoie "400 Bad Request, aucun certificat SSL requis n'a été envoyé, nginx / 1.0.4".
Probablement, il est impossible d'utiliser ssl_verify_client sur la même IP? Dois-je lier ces serveurs à différentes IP, cela résoudra-t-il mon problème?
Je ne suis pas un expert de Nginx, mais j'ai vu des problèmes similaires avec Apache utilisant SSL et des hôtes virtuels. Le problème est l'ordre dans lequel le serveur gère la négociation SSL par rapport au choix de l'hôte virtuel. La première étape consiste à établir la connexion cryptée, et ce n'est qu'après cela que le serveur voit le nom d'hôte que vous demandez. Et jusqu'à ce qu'il le sache, il utilisera le paramètre par défaut - qui dans ce cas est le premier hôte, qui nécessite un certificat client pour établir la connexion SSL.
Donc, réponse courte - dans ce cas, vous feriez mieux d'avoir des ports séparés ou des adresses IP distinctes.
la source
J'ai rencontré le même problème et trouvé une solution.
Veuillez essayer d'ajouter un
default_server
indicateur pour le deuxième serveurla source