Nginx: OCSP und Client-Zertifikate

Nginx: OCSP und Client-Zertifikate

Ich habe ein funktionierendes Nginx-Setup mit konfiguriertem OCSP-Stapling. Jetzt möchte ich eine Client-Zertifikatauthentifizierung für eine Reihe von URLs hinzufügen.

Daher habe ich eine ssl_client_certificateAnweisung hinzugefügt, die auf das CA-Zertifikat verweist, das wir für die eingeschränkten URLs verwenden (es handelt sich um ein privates CA-Zertifikat, das von keiner öffentlich bekannten CA signiert wurde), und da der Großteil des Servers weiterhin öffentlich verfügbar sein sollte, habe ich es ssl_verify_clientauf gesetzt optional.

Dies funktioniert jedoch nur halbherzig: Ich kann mit cURL(*) Anfragen sowohl mit als auch ohne Übergabe eines Zertifikats ausführen und erhalte sowohl auf öffentlichen URLs als auch auf geschützten URLs, die das Vorhandensein des Zertifikats prüfen, die erwarteten Antworten.

Aber nun zu meiner Frage: Wenn ich mit einem Browser (ohne Vorlage eines Zertifikats) auf dieselben URLs zugreife, antwortet Nginx mit Fehler 400. Was mich verblüfft, ist, dass es einwandfrei funktioniert, wenn ich mit den Firefox Developer Tools aus einer der fehlgeschlagenen Anfragen eine cURL-Anfrage erstelle und diese über die Befehlszeile ausführe. Was könnte das Problem sein?

Auch cURLs -vzeigen --trace-asciinichts, was mir erklären würde, warum es in einem Browser fehlschlagen könnte. Ich füge hier nicht die gesamte (lange) Konfiguration ein. Wenn Sie der Meinung sind, dass etwas Elementares fehlt, können Sie gerne einen Kommentar hinterlassen.

Bearbeiten: Ich habe überprüft und bestätigt, dass cURL Host, User-Agent, Accept, Accept-Language, Referrer, DNTHeader sowie Cookies und Sitzungs-IDs sendet und die Komprimierung aktiviert, genau wie Firefox es tun würde.

Darüber hinaus verfügen weder Firefox noch cURL über Client-Zertifikate, die sie dem Server anbieten könnten. Zudem ist Firefox so konfiguriert, dass er nach Zertifikaten fragt, anstatt diese automatisch anzubieten.

Noch eine Änderung: Nach der Mittagspause (in der Zwischenzeit keine Konfigurationsänderungen vorgenommen) konnte Firefox die erste Seite und die zugehörigen Ressourcen einmal laden. Jetzt, ein paar Minuten später, funktioniert es nicht mehr, obwohl ich nur verschiedene Anfragen ausprobiert habe, also keine Änderungen vorgenommen habe. Außerdem meldet Chrome den Fehler 400 und die Verwendung von „Als cURL kopieren“ (was wieder alle Header einschließt) aus seinen Entwicklertools zeigt, dass es in cURL wieder funktioniert. Außerdem habe ich alle Anfragen mehrmals ausprobiert, um sicherzustellen, dass es keine Inkonsistenzen im Verhalten gegenüber einem einzelnen Benutzeragenten gibt. Ich bin ratlos, es kommt mir alles sehr zufällig vor.

verwandte Informationen