Wir haben eine C#-Webanwendung, bei der die Benutzer eine Verbindung mit einem digitalen Zertifikat herstellen, das in ihren Browsern gespeichert ist.
Anhand der Beispiele, die wir gesehen haben, ist es einfach, die Identität des Benutzers zu überprüfen, sobald wir SSL aktivieren, da wir mit Request.ClientCertificate auf die Felder im Zertifikat zugreifen können, um den Namen des Benutzers zu überprüfen.
Wir wurden jedoch auch gebeten, die vom Benutzer übermittelten Daten (einige einfache Felder und eine Binärdatei) zu signieren, damit wir zweifelsfrei nachweisen können, welcher Benutzer jeden Datensatz in unsere Datenbank eingegeben hat.
Unser erster Gedanke war, eine kleine Textsignatur mit den Feldern (und, wenn möglich, dem md5-Wert der Datei) zu erstellen und sie mit dem privaten Schlüssel des Zertifikats zu verschlüsseln, aber...
Soweit ich weiß, können wir nicht auf den privaten Schlüssel des Zertifikats zugreifen, um die Daten zu signieren, und ich weiß nicht, ob es eine Möglichkeit gibt, die Felder im Browser zu signieren, oder ob wir keine andere Möglichkeit haben, als ein Java-Applet zu verwenden. Und wenn letzteres der Fall ist, wie würden wir es tun (Gibt es ein Open-Source-Applet, das wir verwenden können? Wäre es besser, wenn wir selbst eines erstellen?)
Natürlich wäre es besser, wenn es eine Möglichkeit gäbe, die auf dem Server empfangenen Felder zu "signieren", indem wir die Daten verwenden, auf die wir über das Zertifikat des Benutzers zugreifen können. Aber wenn nicht, jede Info über den besten Weg, um das Problem zu lösen, wäre zu schätzen.