gpt4 book ai didi

c# - 需要避免数字签名公共(public)证书 BinarySecurityElement 被 mtom 编码

转载 作者:太空宇宙 更新时间:2023-11-03 16:05:35 27 4
gpt4 key购买 nike

我面临一个似乎无法解决的问题。使用 wcf 和 ws 安全性使用基于 java 的 Web 服务。使用非 mtom 请求,公钥证书作为 base64 字符串作为二进制安全元素的一部分发送。但是,同一证书针对 mtom 请求进行了 mtom 编码。有没有一种方法可以避免使用 wcf,以便公钥证书作为 binarysecurityelement 中的嵌入式 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 位公钥的证书,这是正确的。

我也有一个自定义编码器来编写消息,但我似乎找不到任何特定的方法来覆盖,这将允许我修改二进制安全 token 在请求中的生成方式。想法?

不确定自定义编码器在这里是否也有帮助,使用 xmlwriter 对文件调用了消息对象上的 writemessage。我可以看到由 base64 字符串组成的 binarysecuritytoken,我认为它是证书原始字节。可能在那之后消息是 mtom 优化的?

最佳答案

我在这里看不到简单的方法。您可以一起禁用 MTOM,但另外它会优化二进制数据。它有一个我认为您无法配置的内部阈值(仅将二进制数据从消息中移出特定大小的消息是划算的)。

如果你无论如何都想尝试这个,那么你可能需要实现一个 custom message encoder这与 MTOM 编码器非常相似(所以看看它在反射器中的代码),也许你甚至可以在内部调用它。您要替换的是 XmlMtomWriter 的实例化。在您自己的编写器中覆盖 writeBase64() 方法,以便在数据未通过阈值时它将委托(delegate)给 writeString。您可以通过让 .Net 处于源 Debug模式并在正确的位置放置断点来演练整个场景。

关于c# - 需要避免数字签名公共(public)证书 BinarySecurityElement 被 mtom 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19599286/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com