2016-09-29 4 views
0

Wir verwenden DIIOP, um E-Mails in einem Java-Programm zu senden, aber wenn der Empfänger die E-Mail öffnet, obwohl "Diese Nachricht digital signiert" ist, wird eine Warnmeldung angezeigt Statusleiste "Dieses Dokument wurde seit dem Zeitpunkt geändert, an dem es signiert wurde! Vorsätzliche Manipulationen sind möglicherweise aufgetreten." Überprüfen Sie die Eigenschaften der empfangenen Mail "$ Signature" ist da, aber "$ SignatureStatus" ist "2" angibt, dass das Dokument nach dem Signieren geändert wurde.Lotus Notes E-Mail-Signatur mit Java-API über DIIOP

Der Code-Schnipsel:

lotus.domino.Document memo = dominoDb.createDocument(); 
memo.replaceItemValue("Form", "Memo"); 
... 
memo.setSaveMessageOnSend(true); 
memo.setSignOnSend(true); 
memo.sign(); 
memo.send(false); 

Wenn entweder memo.sign() oder memo.setSignOnSend (true) weggelassen wird, "das empfangene Dokument nicht ohne $ Unterschrift und $ SignatureStatus Wert unterzeichnet werden würde 0 ".

Übrigens funktioniert das memo.setEncryptOnSend (boolean) wie erwartet.

Antwort

1

Sie können keine E-Mail-Nachrichten unter Verwendung der Notes Java-API über DIIOP signieren.

Die Verschlüsselung funktioniert, da der öffentliche Schlüssel des Empfängers erforderlich ist, der sich im Domino-Verzeichnis auf dem Server befindet und für den API-Code zugänglich ist, auf den über DIIOP auf dem Server remote zugegriffen wird.

Die digitale Signatur erfordert dagegen den privaten Schlüssel des Absenders. Der private Schlüssel wird in der Notes ID-Datei des Benutzers gespeichert. Wenn Sie eine Verbindung zu Notes über DIIOP herstellen, werden Sie nicht zur Eingabe des Kennworts für die Notes ID-Datei des Benutzers aufgefordert, die für den Zugriff auf den privaten Schlüssel erforderlich ist.

In den meisten Fällen, in denen Sie DIIOP verwenden würden, ist die Notes ID-Datei des Benutzers nicht einmal auf dem Computer vorhanden, auf dem der Code ausgeführt wird, da keine Notes Software auf dem Computer installiert ist. Alles, was Sie haben, ist die NCSO.jar-Datei, die nicht den Notes-Kerncode enthält, der die ID-Datei entschlüsseln und lesen kann. Und obwohl die Notes-ID-Datei des Benutzers möglicherweise auf dem Server vorhanden ist, mit dem Sie eine Verbindung herstellen, und wo sie möglicherweise in der ID-Vault gespeichert ist, gibt es keine Möglichkeit, über eine veröffentlichte API auf den darin enthaltenen privaten Schlüssel zuzugreifen.

+0

Ich könnte signierte Mail von Java über DIIOP mit meinem Protokoll Standalone-Programm senden. Es ist nur nach der Integration mit dem vorhandenen Code, dann erscheint das Problem. Es wurde festgestellt, dass es durch die Konvertierung von MIME in Richtext auf der Serverseite verursacht wurde. Da das Signieren von MIME-Mail eine Internet-Zertifizierung erfordert, mussten wir session.convertMIME (true) setzen und ein MIME-Dokument erstellen, indem Sie die Header "An", "Cc" und "Bcc" des MIMEEEntity setzen. Speichern Sie es und holen Sie es wieder, so dass es RIchtext wurde, Dann haben wir das Signierproblem. Wenn wir jedoch die Elemente "SentTo", "CopyTo", "BlindCopyTo" einstellen, können wir das Dokument unterschreiben –

+0

Wie greift Ihr Standalone-Code auf den privaten Schlüssel für das Internet-Zertifikat zu? Wenn Sie DIIOP verwenden, funktioniert Ihr Code ohne die lokalen Notes-DLLs, sodass er die Benutzer-ID-Datei nicht lesen kann. Der private Schlüssel für das Internet-Zertifikat befindet sich in der Benutzer-ID-Datei. Wird in Ihrem Code nach dem Passwort der ID-Datei gefragt? Ich kann mir nur vorstellen, dass dies über DIIOP funktioniert, wenn Sie die ID in der Mail-Datei des Benutzers synchronisiert haben. DWA (iNotes) kann mit diesem Mechanismus Nachrichten von einem Browser signieren, aber ich dachte nicht, dass das DIIOP das tun könnte. –

+1

Es ist zwar vom Server signiert, nicht vom Benutzer. Du hast Recht. –