【问题标题】:Does WCF message security actually encrypt message contents?WCF 消息安全是否真的加密消息内容?
【发布时间】:2012-07-10 22:04:39
【问题描述】:

我已阅读 MSDN 上提供的文档以及该站点上的其他一些帖子。但是,在使用带有证书的消息安全性时,WCF(特别是 NetTcpBinding)是否会真正加密消息 contents 仍然有点不清楚。有人确定吗?

例如,您可以在配置中同时指定传输和消息凭据:

       <security mode="TransportWithMessageCredential">
          <transport clientCredentialType="Certificate"/>
          <message clientCredentialType="Certificate"
                   negotiateServiceCredential="true" />
       </security>

据我所知,MSDN 文档暗示消息安全性仅依赖于用户名/密码或基于证书的身份验证(协商),但并未明确说明消息本身实际上是在消息级别加密的。

例如,如果我只使用基于证书的协商的消息安全性,我认为消息内容实际上并未加密(即,数据包嗅探器可以拦截原始消息内容——即使服务强制执行身份验证)?

如果可以实现真正的消息级加密(使用 NetTcpBinding),它是如何在代码中完成的?我相信这与算法套件有关,虽然我不确定,

binding.Security.Mode = SecurityMode.Message;
binding.Security.Message.ClientCredentialType = MessageCredentialType.Windows;
binding.Security.Message.AlgorithmSuite = new System.ServiceModel.Security.TripleDesSecurityAlgorithmSuite(); 

【问题讨论】:

    标签: c# wcf security certificate nettcpbinding


    【解决方案1】:

    不确定这是否完全回答了您的问题,但根据this article TCP 默认加密。

    NetTcpBinding 默认是安全的。具体来说,调用者必须提供 用于身份验证和所有消息数据包的 Windows 凭据 通过 TCP 协议签名和加密。

    换句话说,如果您自定义配置但使用“无”以外的安全模式,

    默认情况下,所有安全 WCF 绑定都会对消息进行加密和签名。 但是,对于传输安全性,您不能禁用此功能 安全性,您可能希望出于调试目的禁​​用它,或者当 使用了另一种保护方法,例如 IPSec。

    【讨论】:

    • 我决定自己使用 Wireshark 嗅探数据包,我可以确认这是真的。显然,windows 负责域/受信任域通信的加密本身。谢谢!
    【解决方案2】:

    WCF 可以使用 netTcpBinding 加密消息内容。最简单的查看方法是将diagnostics 添加到您的.config 文件并输出一个svclog 文件。用 svctraceviewer.exe 工具其实可以看到加密的消息

    这里有更多信息(您可能已经阅读过)WCF NetTcpBinding Security - how does it work?

    【讨论】:

      【解决方案3】:

      也许是迟到的答案。但这是我在 MSDN 上偶然发现的。

      无论您使用何种传输方式传输消息,消息安全性都使消息安全,并且安全上下文直接嵌入在消息中。

      MSDN Article

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-27
        • 1970-01-01
        • 2012-01-02
        相关资源
        最近更新 更多