需要避免数字签名公共证书二进制安全元素被 mtom 编码
本文关键字:安全 二进制 元素 编码 mtom 证书 数字签名 | 更新日期: 2023-09-27 18:36:58
我面临着一个我似乎无法解决的问题。使用 wcf 和 ws 安全性使用基于 Java 的 Web 服务。使用非 mtom 请求,公钥证书作为二进制安全元素的一部分作为 base64 字符串发送。但是,对于 mtom 请求,相同的证书是 mtom 编码的。有没有办法避免使用 wcf 的情况,以便公钥证书作为二进制安全元素中的嵌入式 base 64 字符串发送,而不是作为 soap 请求信封下方的多部分部分发送?
对于具有公钥的证书是RSA(2048位),并且对于具有公钥的证书,这种情况正在发生:RSA(1024位)
因此,对于具有RSA 2048位公钥的证书,正在发生如下情况:
<o:BinarySecurityToken u:Id="uuid-4d4ee765-5717-4d53-9ac9-99bddc07df6c-2" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">
<xop:Include href="cid:http%3A%2F%2Ftempuri.org%2F1%2F632618206525089430" xmlns:xop="http://www.w3.org/2004/08/xop/include"/>
</o:BinarySecurityToken>
相反,我需要嵌入 base64 证书值而不是 xop:include 元素。对于具有RSA 1024位公钥的证书,这种情况会正确发生。
我也有一个自定义编码器来编写消息,但我似乎找不到任何特定的方法来覆盖,这将允许我修改二进制安全令牌在请求中的生成方式。思潮?
不确定自定义编码器是否也会在这里有所帮助,请使用 xmlwriter 对文件在消息对象上调用 writemessage。我可以看到由 base64 字符串组成的二进制安全令牌,我相信这是证书原始字节。可能在那之后消息被 mtom 优化了?
我在这里看不到一个简单的方法。您可以一起禁用MTOM,但实际上它将优化二进制数据。它有一个内部 threashold,我认为您无法配置(仅从特定大小移出消息中的二进制数据具有成本效益)。
如果你想尝试这个,那么你可能需要实现一个与 MTOM 编码器非常相似的自定义消息编码器(所以看看它在反射器中的代码),也许你甚至可以在内部调用它。您要替换的是 XmlMtomWriter 的实例化。在你自己的编写器中,覆盖 writeBase64() 方法,这样如果数据没有通过 threashold,它将委托给 writeString。可以通过将 .Net 置于源调试模式并将断点放在正确的位置来试运行整个方案。