肥皂标准化变换
我正在尝试使用Datapower设备上托pipe的soap服务。 到目前为止,发送soap服务和接收方为下面的xml计算摘要是不同的。
应用于创build摘要值的转换
<ds:Reference URI="#TS-f3c103e9-1897-43d8-8cf6-274bdb647678"> <ds:Transforms> <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"> <ec:InclusiveNamespaces xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#" PrefixList="wsse soap"/> </ds:Transform> </ds:Transforms> <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> <ds:DigestValue>1rjXQQWVMM5KBWY8uswUynk6PCk=</ds:DigestValue> </ds:Reference>
引用的元素。
<wsu:Timestamp wsu:Id="TS-f3c103e9-1897-43d8-8cf6-274bdb647678"> <wsu:Created>2016-02-24T15:32:12.693Z</wsu:Created> <wsu:Expires>2016-02-24T15:37:12.693Z</wsu:Expires> </wsu:Timestamp>
上述元素的名称空间应用于根节点上
- 的xmlns:WSU = “http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd”
- 的xmlns:DS = “http://www.w3.org/2000/09/xmldsig#”
发送上述XML可以正常工作(从Java SOAP客户端库创build)。 但是,当我用节点sha1消化同样的元素时,我得到了不同的摘要值。
我正在尝试在计算摘要值之前发现java在转换中的作用。 如果我能找出它实际发送到sha1方法的内容,我可以修改节点中的代码来做同样的事情。
给定上面的引用元素,sha1之前的变换之前的输出xml是什么?
您需要弄清楚您的Java库或API如何创build向SHA1方法发送的规范化XML。
使用Apache Commons Codec( https://commons.apache.org/proper/commons-codec/ )并猜测Timestamp元素中的C14N'd XML以及Transform元素中包含的命名空间,我可以得到相同的摘要值:1rjXQQWVMM5KBWY8uswUynk6PCk =
以下是我使用的代码:
import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.digest.DigestUtils; public class Sha1Test { public static void main(String args[]) throws Exception { String data = "<wsu:Timestamp xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\" xmlns:wsu=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\" wsu:Id=\"TS-f3c103e9-1897-43d8-8cf6-274bdb647678\"><wsu:Created>2016-02-24T15:32:12.693Z</wsu:Created><wsu:Expires>2016-02-24T15:37:12.693Z</wsu:Expires></wsu:Timestamp>"; printShaDigest(data); } static void printShaDigest(String data) { System.out.println("data = " + data); System.out.println("sha1 = " + new String(Base64.encodeBase64(DigestUtils.sha1(data.getBytes())))); } }
- 使用zeromq与Python与Java的node.js性能
- Java的邮件守护进程
- 在Java REST风格的Web服务(javax.ws..rs。*)Jersey中接收JSON对象
- node.js / V8replace.NET或Java?
- ServiceStack.net相当于Java(或可以与ServiceStack交互的东西)?
- 为什么node.js的encryption模块给出的结果与Java的AESencryption的Cipher类不同?
- 如果一个Web服务器是非阻塞的,这是否意味着它正在处理与node.js相同的IO?
- Java Websockets +事件监听器。 这是正确的方法吗?
- 节点:运行一个Java文件并返回响应