如果我使用https,设置establishSecurityContext="False"会有什么影响?

26

我的 WFC 服务使用了配置为 wsHttpBinding 的绑定:

<security mode="TransportWithMessageCredential">
    <message establishSecurityContext="True" clientCredentialType="UserName"/>
    <transport clientCredentialType="None" proxyCredentialType="None"/>
</security>

我们的一个合作伙伴正在尝试使用Java Metro库调用我们的服务。他们遇到了这个问题。为了解决这个问题,我必须将establishSecurityContext设置为"False"。我们进行了快速测试,并且当我将其设置为false时,它确实有效。

如果不使用安全会话(通过设置establishSecurityContext="False"),会有什么影响?我已经在https上运行了。那么从安全性方面来说,我会没问题吗?还有其他影响要考虑吗(比如性能)?

谢谢

1个回答

45
区别在于对于不支持SCT(安全上下文令牌)的端点,密钥交换和验证必须在每个调用中执行,而不是只在会话中执行一次并缓存,然后在消息中传递SCT。 SCT基于对称密钥,因此它们在签名/加密消息方面更加高效。当客户端预期连续进行多次调用时,使用SCT非常好,因为它减轻了每次执行一次性密钥的交换和验证的需要。
我建议您只为不支持SCT的客户端公开另一个端点,并告诉他们使用该端点。对于可以使用SCT的客户端,请将其指向默认端点,并保留所有相关好处。
有关更多信息,请查看WS-SecureConversation文档的第三节

优秀的建议是使用单独的端点 - 允许每种客户端类型使用最适合它们的“最佳”端点! - marc_s
1
Drew,我的客户在每次服务调用时都会打开和关闭他们的通道。即使我启用了安全会话,他们也无法获得其好处。这是正确的吗? - Sylvain
3
没错,如果您关闭会话,就会终止会话并失去任何好处。正如我所说的那样,最好自己汇集客户或连续进行多次调用。另外,我没有指出,但请记住使用 SCT 意味着您正在服务器端使用会话,因此请注意这一点。例如,maxConcurrentSessions 的默认值为10。 - Drew Marsh
一个老问题,但仍然相关。即使没有使用SSL卸载,SCT似乎也无法通过充当SSL终止器的HTTPS级别负载均衡器,即客户端使用SSL命中负载均衡器,后者终止并启动到负载均衡器后面的某台机器的新SSL连接。这在双向SSL身份验证中不起作用,看起来在SCT中也不起作用。 - mark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接