2016-09-29 17 views
0

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)は期待どおりに動作します。

答えて

1

Notes Java API over DIIOPを使用して電子メールメッセージに署名することはできません。

暗号化は、受信者の公開鍵を必要とするため、サーバー上のDominoディレクトリにあり、DIIOP経由でサーバー上でリモートアクセスされるAPIコードからアクセスできます。

デジタル署名には、送信者の秘密鍵が必要です。秘密鍵は、ユーザーのNotes IDファイルに格納されます。 DIIOPを介してNotesに接続しているときは、秘密鍵にアクセスするために必要となるユーザーのNotes IDファイルのパスワードの入力を求められません。

実際、DIIOPを使用するほとんどの場合、マシンにNotesソフトウェアがインストールされていないため、コードが実行されているマシンにはユーザーのNotes IDファイルが存在しません。あなたが持っているのは、NCSO.jarファイルだけです.NCSO.jarファイルには、IDファイルを解読して読み取ることができるコアノートコードは含まれていません。ユーザーのNotes IDファイルは、接続先のサーバー上に存在する可能性がありますが、IDボールトに格納されている可能性がありますが、発行されたAPIを介して内部の秘密鍵にアクセスする方法はありません。

+0

自分のプロトコルスタンドアロンプ​​ログラムを使用して、JavaからDIIOP経由で署名付きメールを送信できました。既存のコードと統合した後で、問題が表示されます。 MIMEがサーバー側のrichtextに変換されたことが原因であることが判明しました。 mimeメールに署名するにはインターネット証明書が必要なので、session.convertMIME(true)を設定してMIME文書を作成し、MIMEEntityの "To"、 "Cc"、 "Bcc"ヘッダを設定しなければなりませんでした。それを保存して再度検索して、それがRIchtextになるようにしてください。その後、署名の問題があります。しかし、 "SentTo"、 "CopyTo"、 "BlindCopyTo"項目を設定すると、文書に署名することができます –

+0

スタンドアロンコードはどのようにインターネット証明書の秘密鍵にアクセスしますか? DIIOPを使用している場合、コードはローカルNotes DLLなしで動作するため、ユーザーIDファイルを読み取ることはできません。インターネット証明書の秘密鍵はユーザーIDファイルにあります。あなたのコードはIDファイルのパスワードを要求しますか? DIIOPでこれがうまくいくと私が想像できる唯一の方法は、IDがユーザーのメールファイルに同期されているかどうかです。 DWA(iNotes)は、このメカニズムを使用してブラウザからメッセージに署名できますが、DIIOPがそれを実行できるとは考えていませんでした。 –

+1

これは、サーバーではなくユーザーによって署名されています。あなたは正しいです。 –

関連する問題