使用带有签名,加密和编码的JAXB

Sta*_*ros 6 java xml jaxb pki

最近我们的任务是为我们的产品提出XML通信规范.我的一些同事对JAXB的编组和解组XML文档有很高的评价.我花了一些时间玩它,我明白它们来自哪里.它使简单的XML文档变得简单.

现在把它提升一个档次.我希望在我们的通信模型中看到的一件事是"内置"签名验证,以便在我之后使用它.我遇到的一个问题是验证签名我需要将相应的XML视为字节.让我们来看看这个例子......

<topLevel>
    <sensitiveData encoding="UTF8">
        <creditCard>
            <number>1234-1234-1234-1234</number>
            <expDate>Oct 2020</expDate>
        </creditCard>
    </sensitiveData>
    <signatureOfSensitiveData algorithm="SHA1WithRSA">VGhpc0lzQVNpZ25hdHVyZQ==</signatureOfSensitiveData>
</topLevel>
Run Code Online (Sandbox Code Playgroud)

编辑:我实际上并没有传递信用卡数据.这里只是一个例子.

如果我可以获得byte[]"sensitiveData"标记内的所有内容(由编码确定)表示,那将会是多么美妙.我甚至不介意再次打电话给"unmarshall" byte[].

这也为我们打开了另一扇门.我们实际上可以将"压缩"和"加密"属性引入元素中.如果我们可以将它们视为一个byte[]我们可以膨胀并解密它们然后传递它们再次进行解组.

旁注:我认为如果您对XML进行base64编码然后将其包含在元素中,则此方法有效.但这会迫使我们基于64甚至简单的文档,并在我们的消息中引入一些不必要的膨胀.

有什么想法解决这个问题吗?我希望我在JAXB中缺少一些基本的东西,在我得到它之后会变得轻而易举.

谢谢!

Cyr*_*lle 0

您可以使用支持 WS-Security 的 JAX-WS 框架。JAX-WS 依赖于 JAXB,但添加了支持 SOAP 协议的通信部分,WS-Security 是 SOAP/XML 中 XML 签名、加密和其他安全功能的标准。WS-Security 依赖于评论中提到的 XML 签名和加密标准。

此类框架的示例(非详尽列表):Apache CXF、Glassfish Metro 等。更多信息