java as2_使用AS2(http)协议实现 B2B 商用数据交换 (二) [译]

本文深入介绍了AS2协议在B2B数据交换中的应用,通过Java和S/MIME详细阐述了如何创建AS2消息,包括MIME消息的生成、签名、加密过程。示例代码展示了如何利用JavaMail、Bouncy Castle库来构建和签署MIME消息,以及加密以确保数据的安全性和完整性。
摘要由CSDN通过智能技术生成

前言

设计 AS2 协议的主要目的,是基于 HTTP 协议之上实现安全的结构化电子商业数据交换。在这系列文章的第一部分,我们大体了解了 AS2 为何这么优秀。我们作为 B2B 集成平台 AS2Gateway 的开发者,已经在 AS2 协议这方面工作了很多年。在本篇文章中,我们希望给予更多的见解关于 AS2 协议,如何使用几行 java 代码和 S/MIME 格式去构造一个 AS2 消息。

废话不多说,让我们现在开始。AS2 消息的基本结构:他由 MIME 格式数据组成,并存在于 HTTP 消息体里面,再加上一些特有的 AS2 消息头部。

AS2 消息的最终结构如下图所示。在本文中,我们会从一个简单的文档开始,一步一步生成最终的加密过的 HTTP 消息体。

84fef5fbc058d94c822131fb7c08291a.png

译者注:我们看到最外层是 HTTP 数据包,AS2 消息的实际内容 (使用非对称加密算法加密过的) 是挂载到 HTTP BODY (HTTP请求体) 里面的。AS2 协议重点就在于如何生成/解析这个 Encrypted HTTP Body (加密过的 HTTP 请求体)。

解密过后的 AS2 消息中还包含了基础文档 (Functional Document) 和数字签名 (Ditital Signature),AS2 协议规定应用软件需要校验这个数据签名 (Digital Signature) 来确保数据完整性,具体做法是

使用远程客户公钥解密数字签名,得到一个散列码,记为 HASH-CODE-1

使用约定好的散列算法 (例如 MD5, SHA) 计算出基础文档 (Functional Document) 的散列码,记为 HASH-CODE-2

比较这两个散列码 HASH-CODE-1, HASH-CODE-2 从而确认数据是否被篡改

生成 MIME 消息

首先,让我们看一个 MIME 消息样例。下面的样例代码使用了 JavaMail 和 Apache Tika,用来生成一个 MIME 消息

Properties props = System.getProperties();

Session session = Session.getDefaultInstance(props, null);

MimeMessage finalMessage = new MimeMessage(session);

Tika tika = new Tika();

File file = new File("/home/rajind/sample-text-file.txt");

String mimeType = tika.detect(file);

finalMessage.setDataHandler(new DataHandler(new FileDataSource(file)));

finalMessage.setHeader("Content-Type", mimeType);

finalMessage.setHeader("Content-Transfer-Encoding", "base64");

finalMessage.setFileName(file.getName());

生成的 MIME 消息结构如下所示,注意 MIME 的头部信息和消息内容 (消息内容通过 base64 编码,因为我们在头部指定了该编码格式)

Message-ID: <1642534850.0.1512980924095@rajind-ENVY>

MIME-Version: 1.0

Content-Type: text/plain; name=sample-text-file.txt

Content-Transfer-Encoding: base64

Content-Disposition: attachment; filename=sample-text-file.txt

c2FtcGxlIHRleHQgY29udGVudCBvbmUK

签署 MIME 消息

现在我们看看 S/MIME 如何发挥作用。S/MIME 提供了两种安全措施,数字签名 (Digital Signature) 和信息加密 (Message Encryption)。这两项措施是 S/MIME 消息安全性的基础。数字签名提供身份认证,消息不可否认性以及数据完整性校验。信息加密服务则提供了数据机密性以及数据完整性。下面的代码片断展示了如何对 MIME 消息进行签名,这里我们使用了 Bouncy Castle S/MIME API, Bouncy Castle Crypto package, 以及 Bouncy Castle Java APIs for CMS, PKCS, EAC, TSP, CMP, CRMF, OCSP, and certificate generation.

// loading identity store

FileInputStream is = new FileInputStream("/home/rajind/Downloads/keystore.jks");

KeyStore identityKeystore = KeyStore.getInstance(KeyStore.getDefaultType());

String password = "password";

identityKeystore

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值