Ich habe Nginx nur als Proxy für eine Vielzahl von Webservern ausgeführt. Einer unserer Clients hat uns gebeten, Client-Zertifikate zu verwenden, und uns 3 Zertifikate für die 3 verschiedenen Computer bereitgestellt, die eine Verbindung zu einem Webservice herstellen, der auf einem der Proxyserver ausgeführt wird.
Nachdem ich dies noch nie zuvor getan hatte, fand ich die relevanten Nginx-Einstellungen und erstellte eine Site-Konfiguration (relevanter Teil unten).
server {
listen 443 ssl;
server_name service.domain.com;
ssl_certificate /etc/nginx/ssl/wildcard/server.crt;
ssl_certificate_key /etc/nginx/ssl/wildcard/server.key;
ssl_client_certificate /etc/nginx/ssl/client.certificates/client_package.cer;
ssl_verify_client on;
Ich habe die 3 Client-Zertifikate sowie ein von einem Entwickler erstelltes Zertifikat (dieses wurde selbst signiert) verkettet, der während der Entwicklung auf die Site zugreifen musste, in die oben erwähnte einzelne Datei.
Der Client hat nun versucht, auf die Site zuzugreifen, kann dies jedoch nicht. Als Test der Konfiguration habe ich das Entwicklerzertifikat aus der verketteten Zertifikatdatei entfernt und bestätigt, dass er nicht auf die Site zugreifen konnte. Nachdem ich sein Zertifikat wieder in die verkettete Datei eingefügt hatte, konnte er (Entwickler) wieder korrekt auf die Site zugreifen.
Ich habe den Zugriff auf Debug-Ebene im Fehlerprotokoll aktiviert und als der Client versuchte, eine Verbindung herzustellen, wurde der folgende Fehler angezeigt.
2015/08/13 11:57:41 [info] 27601 # 0: * 1963 Client hat während der Verarbeitung von SPDY kein erforderliches SSL-Zertifikat gesendet, Client: 1x.xx.xx.xx, Server: service.domain.com, Anfrage: " GET /test.cfm HTTP / 1.1 ", Host:" service.domain.com "
Wie Sie der obigen Konfiguration entnehmen können, ist SPDY nicht aktiviert (aber auf anderen Websites), und der Client stellt sicher, dass er die Client-Zertifikate sendet. Da dies das erste Mal ist, dass ich dies tue, möchte ich sicherstellen, dass, bevor ich zurückgehe und in meinen Protokollen sage, dass Sie kein Client-Zertifikat senden, alles richtig ist.
In Bezug auf die Zertifikate, die mir zugesandt wurden: Alle 3 sind von derselben öffentlichen Zertifizierungsstelle unterzeichnet. Ich habe jedoch nicht die gesamte Kette in einer verketteten Datei. Welche Guides, die ich online gefunden habe, erwähnen, dass sie auch die Root-Ca haben, aber alle sprechen von selbstsigniert, was keines davon ist. Ich bin mir also nicht sicher, ob das zutrifft.
Zur Verdeutlichung versuche ich auch nicht, das Client-Zertifikat an den Proxyserver zu übergeben.
nginx version: nginx / 1.8.0
openssl version: OpenSSL 1.0.1k 8 Jan 2015
Wenn weitere Informationen benötigt werden, lassen Sie es mich bitte wissen
client_package.cer
mit dem CA-Stammzertifikat und den Zwischenzertifikaten aktualisiert , aber ich bekomme immer noch das gleiche Problem. Nun, ich sage den gleichen Fehler, in der Nachricht wird SPDY nicht mehr erwähnt. Um zu bestätigen, dass client_package.cer die Client-Zertifikate nicht mehr enthält