签署其中包含附件的 MimeBodyPart(使用 Bouncycastle)
Posted
技术标签:
【中文标题】签署其中包含附件的 MimeBodyPart(使用 Bouncycastle)【英文标题】:Sign MimeBodyPart which has attachments in it (with Bouncycastle) 【发布时间】:2016-02-21 12:39:57 【问题描述】:我正在使用 OpenAS2Server-1.3.3 库。 发送单个文档工作正常..
现在我想修改它以发送带有附件的文档,就像我们发送电子邮件一样。在这种情况下,所有的解密都运行良好,但签名验证失败(MIC 不匹配)
这就是我想用主文档发送附件的方式:
创建一个MimeMultipart
并将两个MimeBodyPart
添加到其中。 (主要文件及附件)
最后将MimeMultipart
包装在MimeBodyPart
中(我不确定这是这样做的方法,但无论如何Bouncycastle 没有API 来签署MimeMultipart
)
谁能告诉我签署带有附件的消息的正确方法?
MimeBodyPart mainBody = new MimeBodyPart();
mainBody.setDataHandler(new DataHandler(byteSource));
MimeBodyPart attachemt1 = new MimeBodyPart();
attachemt1.attachFile("/home/user/Desktop/Test1.txt");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(mainBody);
multipart.addBodyPart(attachemt1);
MimeBodyPart body = new MimeBodyPart();
body.setContent(multipart);
body.setHeader("Content-Type", multipart.getContentType());
logger.info("--------------Attaching the file... Done");
【问题讨论】:
【参考方案1】:我能够得到问题和解决方案。我只是把它放在这里,以供其他愿意尝试做这种工作的人使用。
我只是在发送端和接收端转储用于计算 MIC 的数据。所以附图将清楚地显示问题。
所以我在发送方为所有附件和主文档手动添加了这些标题字段,如下所示。
mainBody.setHeader("Content-Type", "application/EDI-X12");
mainBody.setHeader("Content-Transfer-Encoding", "7bit");
现在它解决了,“MIC 匹配”。
【讨论】:
以上是关于签署其中包含附件的 MimeBodyPart(使用 Bouncycastle)的主要内容,如果未能解决你的问题,请参考以下文章
MimePartBody.getDisposition() 为内联部分返回 null