签署其中包含附件的 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)的主要内容,如果未能解决你的问题,请参考以下文章

Javamail - 如何处理大附件?

MimePartBody.getDisposition() 为内联部分返回 null

Azure DevOps 工作项附件上传日期

MimeBodyPart getContent 损坏二进制数据

玩转PDF贼稳,产品要做一个三方合同签署,我方了!

玩转PDF贼稳,产品要做一个三方合同签署,我方了!