我面临一个我似乎无法解决的问题。使用 wcf 和 ws 安全性使用基于 Java 的 Web 服务。使用非 mtom 请求,公钥证书作为二进制安全元素的一部分作为 base64 字符串发送。但是,对于 mtom 请求,相同的证书是 mtom 编码的。有没有一种方法可以避免使用 wcf,以便公钥证书作为二进制安全元素中的嵌入式 base 64 字符串发送,而不是作为肥皂请求信封下方的多部分部分发送?
这发生在具有公钥的证书是 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 字符串组成的 binarysecuritytoken,我认为它是证书原始字节。它可能在那之后消息是mtom优化的?