Ich möchte die SSL-Client-Überprüfung für einen meiner virtuellen Hosts erzwingen. Erhalten Sie jedoch den Fehler "Kein erforderliches SSL-Zertifikat wurde gesendet" und versuchen Sie, etwas davon abzurufen.
Hier sind meine Testkonfigurationen:
# 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;
}
Der erste Server antwortet mit 200 http-Code, der zweite gibt "400 Bad Request, kein erforderliches SSL-Zertifikat wurde gesendet, nginx / 1.0.4" zurück.
Wahrscheinlich ist es unmöglich, ssl_verify_client auf derselben IP zu verwenden? Sollte ich diese Server an verschiedene IPs binden, wird dies mein Problem lösen?
Ich bin kein Nginx-Experte, aber ich habe ähnliche Probleme mit Apache unter Verwendung von SSL und virtuellen Hosts gesehen. Das Problem ist die Reihenfolge, in der der Server die SSL-Aushandlung im Vergleich zur Auswahl des virtuellen Hosts abwickelt. Der erste Schritt besteht darin, die verschlüsselte Verbindung herzustellen. Erst danach sieht der Server, nach welchem Hostnamen Sie fragen. Und bis es weiß, wird die Standardeinstellung verwendet - in diesem Fall der erste Host, für den ein Client-Zertifikat erforderlich ist, um die SSL-Verbindung herzustellen.
Kurze Antwort - in diesem Fall ist es besser, entweder separate Ports oder separate IP-Adressen zu haben.
quelle
Ich bin auf dasselbe Problem gestoßen und habe eine Lösung gefunden.
Bitte versuchen Sie, das
default_server
Flag für den zweiten Server hinzuzufügenquelle