通过DIIOP使用Java API进行Lotus Note Mail签名

时间:2016-09-29 09:32:47

标签: lotus-notes lotus-domino signing java-api

我们正在使用DIIOP在Java程序中发送邮件,但是当收件人打开邮件时,虽然有"此邮件已经过数字签名" ,状态栏上有一条警告信息"本文件自签署之日起已被更改!可能发生了故意篡改。"检查收到的邮件的属性" $ Signature"是的,但" $ SignatureStatus"是" 2"表示签名后文件已被更改。

代码段:

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

如果省略memo.sign()或memo.setSignOnSend(true),则不会使用$ Signature签署收到的文档,并且$#SignatureStatus的值为#34; 0"。

顺便说一句,memo.setEncryptOnSend(boolean)就像预期的那样工作。

1 个答案:

答案 0 :(得分:1)

您无法使用DIIOP上的Notes Java API签署电子邮件。

加密是有效的,因为它需要收件人的公钥,该公钥位于服务器上的Domino目录中,并且可以通过DIIOP在服务器上远程访问的API代码访问。

另一方面,数字签名需要发件人的私钥。私钥存储在用户的Notes标识文件中。当您通过DIIOP连接到Notes时,系统不会提示您输入用户的Notes标识文件的密码,这是访问私钥所必需的。

事实上,在您使用DIIOP的大多数情况下,用户的Notes ID文件甚至不存在于运行代码的计算机上,因为没有安装Notes软件。机。您所拥有的只是NCSO.jar文件,该文件不包含能够解密和读取ID文件的核心Notes代码。虽然用户的Notes ID文件可能存在于您要连接的服务器上,但它可能存储在ID库中,但无法通过任何已发布的API访问其中的私钥。