2016-09-29 6 views
0

우리는 Java 프로그램에서 메일을 보내기 위해 DIIOP를 사용하고 있지만 수신자가 메일을 열면 "이 메시지는 디지털 서명 됨"메시지가 표시됩니다. 상태 표시 줄 "이 문서는 서명 된 이후로 변경되었습니다! 의도적 인 조작이 일어 났을 수 있습니다." 수신 된 메일 "$ Signature"의 등록 정보를 확인했지만 "$ SignatureStatus"는 서명 후 문서가 변경되었음을 나타내는 "2"입니다.Lotus Notes 메일 DIIOP를 통해 Java API를 사용하여 서명

코드 조각 : 하나 memo.sign가() 또는 memo.setSignOnSend (true)를 생략하면

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

DIIOP를 통해 Notes Java API를 사용하여 이메일 메시지에 서명 할 수 없습니다.

암호화는 서버의 Domino 디렉토리에 있고 DIIOP를 통해 서버에서 원격으로 액세스되는 API 코드에 액세스 할 수있는 수신자의 공개 키를 필요로하기 때문에 작동합니다.

디지털 서명은 보낸 사람의 개인 키가 필요합니다. 개인 키는 사용자의 Notes ID 파일에 저장됩니다. DIIOP를 통해 Notes에 연결할 때 개인 키에 액세스하려면 사용자의 Notes ID 파일에 대한 암호를 묻는 메시지가 표시되지 않습니다.

실제로 DIIOP를 사용하는 대부분의 경우 Notes 소프트웨어가 시스템에 설치되어 있지 않기 때문에 사용자의 Notes ID 파일이 코드가 실행되는 시스템에 존재하지 않습니다. ID 파일을 해독하고 읽을 수있는 핵심 Notes 코드는 포함하지 않은 NCSO.jar 파일 만 있으면됩니다. 사용자의 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 파일의 암호를 묻는 메시지가 나타 납니까? ID가 사용자의 메일 파일에 동기화되어있는 경우 DIIOP에서 작동하는 것으로 상상할 수있는 유일한 방법입니다. DWA (iNotes)는이 메커니즘을 사용하여 브라우저에서 메시지에 서명 할 수 있지만 DIIOP이 그렇게 할 수 있다고 생각하지 않았습니다. –

+1

그것은 서버가 아닌 사용자가 서명했습니다. 당신이 올바른지. –