Java 使用带有签名、加密和编码的JAXB
最近,我们的任务是为我们的产品设计一个XML通信规范。我的一些同事对JAXB在整理和解压XML文档方面有很高的评价。我花了一些时间来玩弄它,我知道它们是从哪里来的。它使简单的XML文档变得简单 现在让我们把它提高一个档次。我希望在我们的通信模型“内置”签名验证中看到的一件事是为在我之后使用它的人进行签名验证。我遇到的一个问题是,为了验证签名,我需要将相应的XML视为字节。让我们举个例子Java 使用带有签名、加密和编码的JAXB,java,xml,jaxb,pki,Java,Xml,Jaxb,Pki,最近,我们的任务是为我们的产品设计一个XML通信规范。我的一些同事对JAXB在整理和解压XML文档方面有很高的评价。我花了一些时间来玩弄它,我知道它们是从哪里来的。它使简单的XML文档变得简单 现在让我们把它提高一个档次。我希望在我们的通信模型“内置”签名验证中看到的一件事是为在我之后使用它的人进行签名验证。我遇到的一个问题是,为了验证签名,我需要将相应的XML视为字节。让我们举个例子 <topLevel> <sensitiveData encoding="UTF8"&
<topLevel>
<sensitiveData encoding="UTF8">
<creditCard>
<number>1234-1234-1234-1234</number>
<expDate>Oct 2020</expDate>
</creditCard>
</sensitiveData>
<signatureOfSensitiveData algorithm="SHA1WithRSA">VGhpc0lzQVNpZ25hdHVyZQ==</signatureOfSensitiveData>
</topLevel>
1234-1234-1234-1234
2020年10月
VGhpc0lzQVNpZ25hdHVyZQ==
编辑:我实际上并没有传递信用卡数据。这里只是一个例子
如果我能得到“sensitiveData”标记中所有内容的字节[]
(由编码决定)表示,那就太好了。我甚至不介意在字节[]
上再次调用“unmarshall”
这也为我们打开了其他的大门。我们实际上可以在元素中引入“压缩”和“加密”属性。如果我们可以将它们视为字节[]
,那么我们就可以对它们进行膨胀和解密,然后将它们传递给再次解密的对象
旁注:我认为如果您对XML进行base64编码,然后将其包含在一个元素中,这是可行的。但这会迫使我们将64个甚至简单的文档作为基础,并在我们的消息中引入一些不必要的膨胀
有什么解决办法吗?我的希望是,我只是缺少了JAXB中的一些基本内容,在我得到这些之后,这将是一件轻而易举的事
谢谢 您可以使用支持WS-Security的JAX-WS框架。JAX-WS依赖于JAXB,但添加了支持SOAP协议的通信部分,WS-Security是SOAP/XML中XML签名、加密和其他安全特性的标准。WS-Security依赖于评论中提到的XML签名和加密标准
此类框架的示例(非详尽列表):ApacheCXF、Glassfish Metro等 请注意:不要重新发明轮子。如果您确实需要签名和加密,请遵守规范:。(尽管据我所知,在jaxb中找不到对它的直接支持,但有很多很好的库可以实现这一点)。如果您担心
膨胀
,为什么要首先使用xml?这是一个很好的工具,但说到紧凑性,XML应该是您最后的选择。