首页 新闻 搜索 专区 学院

WCF 数据加密

0
悬赏园豆:5 [已关闭问题]

问下子,wcf如何只要加密传输数据,但不验证客户端?

Jeremy Liu的主页 Jeremy Liu | 小虾三级 | 园豆:705
提问于:2009-05-22 20:51
< >
分享
其他回答(2)
1

用服务端证书就行了吧

把模式设置成 消息加密或者连接加密

但客户端模式不限或者NONE

G yc {Son of VB.NET} | 园豆:2006 (老鸟四级) | 2009-05-22 22:06
0

如果服务器设置了消息安全或者传输安全,客户端必须指定相应的绑定设置,但是,我们可以通过继承 UserNamePasswordValidator 实现自定义的用户名,密码验证,示例代码如下:

/// <summary>
    /// 通过为WCF服务使用ServiceBehavior属性,或者在配置文件中定义服务行为来替换
    /// 默认的Windows用户名、密码验证。
    /// </summary>
    public class CustomUserNameValidator : UserNamePasswordValidator
    {
        /// <summary>
        /// 自定义用户名、密码验证
        /// </summary>
        /// <param name="userName">User id coming in as UserName credentials from client.</param>
        /// <param name="password">Password coming in as UserName credentials from client.</param>
        public override void Validate(string userName, string password)
        {
            //TODO:在这里添加验证用户名和密码的业务逻辑,验证失败时始终抛出异常。            

            //什么都不做,就可以实现不验证客户端用户名,密码

        }
    }

服务器使用证书时,通过继承 X509CertificateValidator 实现自定义X509证书验证,从而绕过完全的证书认证机制,如下所示:

/// <summary>
    /// 使用测试用证书时,使用该类替换系统默认的X509证书验证规则。
    /// </summary>
    public abstract class CustomX509CertificateValidator : X509CertificateValidator
    {
        public override void Validate(X509Certificate2 certificate)
        {
            //TODO:创建证书链,并设置验证参数。
            

            //TODO:检查证书
           

            //TODO:检查证书是否来自受信任列表            

 

            //什么都不做

        }

    }

 

采用上面的步骤后,你就可以使用 makecert 制作一份测试用证书,然后使用该证书的公钥加密消息。

注意:使用ws打头的绑定,或者使用自定义绑定,但是要配置好安全会话策略。

Launcher | 园豆:45045 (高人七级) | 2009-05-22 22:40
0

使用传输安全模式即可,

    同时使用传输凭据和消息凭据来保护服务,可以发挥 Windows Communication Foundation (WCF) 中的传输安全模式和消息安全模式的优点。总之,传输层安全提供了完整性和机密性,而消息层安全则提供了严格的传输安全机制所不可能提供的多种凭据。本主题演示使用 WSHttpBindingNetTcpBinding 绑定实现具有消息凭据的传输的基本步骤。有关 设置安全模式的更多信息,请参见如何:设置安全模式。具体的介绍可以参考这个文章:

如何:使用传输安全和消息凭据

http://technet.microsoft.com/zh-cn/library/ms789011.aspx~

Frank Xu Lei | 园豆:1860 (小虾三级) | 2009-05-24 00:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册