我正在尝试在WCF中使用用户名消息安全性。我试图找出使用None / Anonymous的传输凭证类型是否会带来明确的安全风险。
我关心的是初始交换,其中二进制数据通过使用WS-trust规范(TLS协商)进行隧道传输。在建立共享安全上下文之前,这种尝试验证我的用户名和密码是否容易受到网络嗅探器的影响?
欢迎任何想法。
感谢。
<security mode="Message">
<transport clientCredentialType="None" />
<message clientCredentialType="UserName" negotiateServiceCredential="true" algorithmSuite="Default" establishSecurityContext="true" />
</security>
答案 0 :(得分:3)
根据WS-Security的规范,UserName令牌可以包含用户名和密码,未加密。这将通过未加密的电线传输此信息。二进制格式不是一种威慑。这通常被称为“默默无闻的安全”,而不是一种安全措施。
巧合的是,在读了Scott Hanselman的一篇文章时,我遇到了很多这方面的信息。它暗示了你遇到的问题。 http://www.hanselman.com/blog/BreakingAllTheRulesWithWCF.aspx
如果您打算启用此功能,您肯定希望在此处启用某些传输级安全性。
这是关于WS-Security UsernameToken的OASIS文档。它似乎允许几种情况,但我不确定WCF默认使用什么情况:http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0.pdf
如果您感到好奇,则需要启用消息记录并检查消息以查看正在发送的内容。 Enable message logging
答案 1 :(得分:2)
在这里做了更多的研究。从本质上讲,如果您使用密码摘要(默认),则没有密码暴露给嗅探网络的人的风险。如果您不担心邮件正文本身的机密性,则不需要运输安全性。
这在此解释:http://msdn.microsoft.com/en-us/library/ms977327.aspx
长话短说:
密码摘要用于验证客户端是否知道正确的密码。密码永远不会发送。只计算哈希值。
使用随机数和时间窗防止重播攻击。服务器会记住给定时间窗口的nonce,并确保只接受一条带有该nonce的消息。签下整件事,你就安全了。
答案 2 :(得分:0)
是的,数据将不会通过网络加密,因此凭据将暴露给任何关心的人。
您希望以这种方式做某事吗?我不推荐它。