Ich habe eine node.js
basierte Web-App, die sichere (https
) Verbindungen vom Client erfordert. Was ich will ist, dass auf einigen Pfaden Client-Zertifikat-Authentifizierung erforderlich ist und auf anderen Pfaden nicht.Node.js Client-Zertifikat-Authentifizierung nur auf einigen Pfaden
Also zum Beispiel. Wenn der Benutzer zu https://www.example.com/main geht, benötigt der Server keine Client-Zertifikat-Authentifizierung (und der Browser fragt nichts). Wenn der Benutzer jedoch zu https://www.example.com/secure navigiert, ist die Clientzertifikatauthentifizierung erforderlich (und der Browser öffnet daraufhin einen Dialog zur Auswahl des zu verwendenden Zertifikats).
Wie kann ich dies erreichen? Ich bin in der Lage, Client-Zertifikat-Authentifizierung zu erzwingen, wenn ich requestCert:true
und rejectUnauthorized:true
zu https.createServer
Optionen übergebe. Das Problem bei diesem Ansatz besteht darin, dass das Clientzertifikat für jeden Pfad erforderlich ist.
Client-Zertifikate sind Teil des SSL-Handshakes; Ich bin mir nicht sicher, dass du tun kannst, was du willst. – Joe
@Joe: Das war, wovor ich Angst hatte. Aber ich habe Websites gesehen, die das tun. Zunächst zeigen diese Apps eine Seite an, auf der der Benutzer aufgefordert wird, eine Smartcard einzufügen (wo sich das Clientzertifikat befindet). Wenn Sie auf "OK" klicken, leitet die App den Benutzer an einen anderen Pfad in der gleichen App um, der ein Clientzertifikat erfordert. An dieser Stelle zeigt der Browser einen Dialog an, in dem der Benutzer das verwendete Zertifikat auswählen kann. Also, gibt es vielleicht eine Möglichkeit, einen neuen Handshake innerhalb derselben Verbindung zu erzwingen? – Jukka
Ich habe einen Weg, um dieses Problem zu umgehen, aber ich möchte es nicht verwenden. Eine Lösung besteht darin, zwei verschiedene Listener (verschiedene Ports) innerhalb derselben Anwendung zu verwenden. Der andere erfordert Client-Zertifikat-Authentifizierung und ein anderer nicht. Das Problem mit diesem Ansatz ist, dass ich dann nicht-Standard-Port für die zweite verwenden muss. Dies führt dazu, dass einige Kunden ihre Firewall neu konfigurieren müssen, um Verbindungen zu diesem Port zuzulassen. – Jukka