Javaプログラムでメールを送信するのにDIIOPを使用していますが、受信者がメールを開くと「このメッセージはデジタル署名されています。ステータスバー "この文書は署名された時点から変更されています!意図的な改ざんが行われた可能性があります。"受信したメール "$ Signature"のプロパティをチェックしていますが、 "$ SignatureStatus"は "2"で、署名後に変更されたことを示しています。DIIOP経由のJava APIを使用したLotus Notesメール署名
コードスニペット:いずれかmemo.signは()またはmemo.setSignOnSend(真)が省略された場合
lotus.domino.Document memo = dominoDb.createDocument();
memo.replaceItemValue("Form", "Memo");
...
memo.setSaveMessageOnSend(true);
memo.setSignOnSend(true);
memo.sign();
memo.send(false);
は、受信した文書がない$署名で署名されないであろう、との値の$ SignatureStatus " 0 "となる。
ところで、memo.setEncryptOnSend(boolean)は期待どおりに動作します。
自分のプロトコルスタンドアロンプログラムを使用して、JavaからDIIOP経由で署名付きメールを送信できました。既存のコードと統合した後で、問題が表示されます。 MIMEがサーバー側のrichtextに変換されたことが原因であることが判明しました。 mimeメールに署名するにはインターネット証明書が必要なので、session.convertMIME(true)を設定してMIME文書を作成し、MIMEEntityの "To"、 "Cc"、 "Bcc"ヘッダを設定しなければなりませんでした。それを保存して再度検索して、それがRIchtextになるようにしてください。その後、署名の問題があります。しかし、 "SentTo"、 "CopyTo"、 "BlindCopyTo"項目を設定すると、文書に署名することができます –
スタンドアロンコードはどのようにインターネット証明書の秘密鍵にアクセスしますか? DIIOPを使用している場合、コードはローカルNotes DLLなしで動作するため、ユーザーIDファイルを読み取ることはできません。インターネット証明書の秘密鍵はユーザーIDファイルにあります。あなたのコードはIDファイルのパスワードを要求しますか? DIIOPでこれがうまくいくと私が想像できる唯一の方法は、IDがユーザーのメールファイルに同期されているかどうかです。 DWA(iNotes)は、このメカニズムを使用してブラウザからメッセージに署名できますが、DIIOPがそれを実行できるとは考えていませんでした。 –
これは、サーバーではなくユーザーによって署名されています。あなたは正しいです。 –