[MSDN]WCF(14)WCF安全性概述
说明:本内容来自微软的webcast,讲师为徐长龙。为了用手机阅读方便点,抄录存为txt。
本次课程内容包括
- 安全性概述
- 传输安全
- 凭据
安全性概述
- 常见的安全威胁
- 观测网络流量以获取敏感信息。以在线银行为例,某个客户端请求将资金从一个账户转账至另一个账户。一个恶意用户截获了此消息(具有账号和密码),随后从从盗用的账户将资金转出。
- 欺诈性实体在客户端未发觉的情况下起服务的作用。在此情况下,恶意用户(欺诈方)充当在线服务,从客户端截获消息以获取敏感信息。然后,欺诈方使用窃取的数据将资金从盗用的账户转出。此类攻击也称为”钓鱼攻击“。
- 更改消息以获取与调用方所需的结果不同的结果。例如,更改用于存款的账号以便将资金转移到恶意账户。
- 黑客重放,恶意黑客重放同一采购订单。例如,一家网上书店受到数百张订单并将书籍发送给并未订购这些书籍的客户。
- 使某项服务无法对客户端进行身份验证。在此情况下,服务无法确保相应人员执行该项事务。
- 传输安全性可提供下列保障:
- 服务终结点(响应方)身份验证。
- 客户端主体(发起方)身份验证。
- 消息完整性
- 消息保密性
- 重放检测
- WCF 是一个基于 SOAP 消息的分布式编程平台,因此保护客户端和服务之间的消息安全对于保护数据非常重要。
- WCF 基于现有安全性基础结构和 SOAP 消息的经验证的安全标准提供可互操作的安全消息交换通用平台。
- 与现有安全性基础结构集成
- 通常,Web 服务部署都具有现成的安全性解决方案,例如,安全套接字(SSL)或 Kerberos 协议。某些服务则利用已部署的安全性基础结构,例如,使用 Active Directory 的 Windows 域。当评估和采用新服务时,通常需要与这些现有技术集成。
- WCF 安全性与现有传输安全模型集成,并且可对基于 SOAP 消息安全的新传输安全模型使用现有基础结构。
- 与现有身份验证模型集成
- 任何通信安全模型的一个重要组成部分就是能够识别正在通信的实体并对其进行身份验证。这些通信中的实体使用”数字标识“或凭据向通信对方验证自己的身份。随着分布式通信平台的发展,已实现多种不同的凭据身份验证和相关的安全模型。
- 在 Internet 中,通常使用用户名和密码标识用户。
- 在 Intranet 中,使用 Kerberos 域控制器备份用户和服务身份证变得越来越普遍。
- 两个业务合作伙伴之间,证书可用于对合作伙伴的身份进行相互验证。
- 因此,在 Web 服务领域中,同样的服务可想内部企业客户公开,也可向外部合作伙伴或 Internet 客户公开,重要的是基础结构可提供与这些现有安全身份验证模型的集成。WCF 安全性支持多种凭据类型(身份验证模型),其中包括:
- 匿名调用方。
- 用户名客户端凭据。
- 证书客户端凭据。
- Windows ( Kerberos 协议和 NT LanMan [NTLM] )
- WCF 安全性的功能划分
- 传输安全性
- 传输安全性包含三项主要安全功能:完整性、保密性和身份验证。完整性就是检测消息是否已被篡改的能力。机密性就是保证除预期接收方之外的其他人员都无法读取摸个消息;这个通过加密技术实现。身份验证就是验证已声明标识的能力。将这三项功能结合在一起,有助于确保消息安全地从一个点到达另一个点。
- 访问控制
- 访问控制也称为身份验证。身份验证使得不同的用户可以具有不同的数据查看权限。
- 审核
- 审核就是讲安全事件记录到 Windows 事件日志中。可以记录与安全相关的事件,例如身份验证失败(或成功)。
传输安全性
- 三项功能——安全性、保密性和身份验证——合称为传输安全
功能 说明
----- ---------------------------
完整性 完整性可以确保数据是完整、准确的,在数据从一点移动到另一点,
,并可能由多个操作者读取的情况下,尤其如此。完整性必须得到维护,
以免数据被篡改,这通常是由消息的数字签名实现的。
保密性 保密性可以确保消息不被目标读取者以外的任何人读取。例如,信用卡
号在通过 Internet 发送时必须保密。 保密性通常是用公钥/私钥方案进行
数据加密实现的。
身份验证 身份验证是对已声明标识进行的验证。 例如,当使用银行帐户时,必须
只允许帐户的实际所有者取款。 有多种方式可以实现身份验证。 一个常
用方法是使用用户/密码系统。 第二个方法是使用第三方提供的 X.509 证书。
- 使用 WCF 传输安全的常见方案包括
- 使用 Windows 确保传输安全
- WCF 客户端和服务部署在 Windows 域(或 Windows 目录林)中。
- 使用 UserName 和 HTTPS 确保传输安全
- 客户端凭据根据数据库(其中的内容为用户/密码对)进行身份验证。服务时用受信任的安全套接字(SSL) 证书部署在一个 HTTPS 地址的。由于消息是通过 Internet 传输的,因此,客户端和服务需要相互进行身份验证,并且必须在传输过程中保持消息的保密性和完整性。
- 使用证书确保传输安全
- 客户端和服务都具有可用于确保消息安全的证书。客户端和服务通过 Internet 进行相互通信,执行要求消息完整性、保密性和相互身份验证的重要事务。
- 传输安全模式
模式 说明
------- ------------------
None 传输层和消息层都不提供安全措施。 默认情况下,预定义绑定都不使用此模式,
,只有 <basicHttpBinding> 元素(使用代码时,则为 BasicHttpBinding 类)例外。
Transport 使用安全传送(如 HTTPS)实现完整性、保密性和相互身份验证。
Message 使用 SOAP 消息安全实现完整性、保密性和相互身份验证。
SOAP 消息是按照 WS-Security 标准获得保护的。
混合模式 使用传送安全实现完整性、保密性和服务器身份验证。
使用消息安全(WS-Security 和其他标准)实现客户端身份验证。
(此模式的枚举值是 TransportWithMessageCredential。)
- 绑定支持的安全模式
绑定 是否支持Transport模式 是否支持Message模式 是否支持TransportWithMessageCredential
------- --------------------- ------------------- --------------------------------------
BasicHttpBinding 是 是 是
WSHttpBinding 是 是 是
WSDualHttpBinding 否 是 否
NetTcpBinding 是 是 是
NetNamedPipeBinding 是 否 否
NetMsmqBinding 是 是 否
MsmqIntegrationBinding 是 否 否
wsFederationHttpBinding 否 是 是
- 凭据和传输安全
- 凭据是一些数据,用于证书已声明标识或功能。出示凭据的操作包括,同时出示数据和对数据的所有权证明。
- 例如,考虑 WCF 中支持的两种凭据类型:
- 用户名
- 用户名表示已声明标识,密码表示所有权证明。这种情况下,受信任的颁发机构则是验证用户名和密码的系统。
- (X.509) 证书凭据
- 在证书凭据中,主题名称、主题备用名称或证书中的特定字段可用于表示已声明标识和/或功能。凭据中的数据所有权证明的建立,是用关联私钥生成签名实现的。
- 传输安全模式(Transport)的凭据类型
设置 说明
--------- ------------------------
None 指定客户端不需要提供任何凭据。 这相当于匿名客户端。
Basic 指定基本身份验证。
Digest 指定摘要式身份验证。
Ntlm 指定在 Windows 域中使用 SSPI 协商进行 Windows 身份验证。
要使用 SSPI 协商,就需要使用 Kerberos 协议或 NT LanMan(NTLM)。
Windows 指定在 Windows 域中使用 SSPI 进行 Windows 身份验证。
SSPI选择 Kerberos 协议或 NTLM 作为身份验证服务。
SSPI 首先尝试 Kerberos 协议;如果失败,则使用 NTLM。
Certificate 使用证书(通常是 X.509)执行客户端身份验证。
IssuedToken 允许服务要求使用由安全令牌服务或 CardSpace 颁发的令牌对客户端进行身份验证。
- 消息安全模式(Message)的凭据类型
设置 说明
----------- --------------------------------
None 允许服务与匿名客户端交互。
Windows 允许在 Windows 凭据的已通过身份验证的上下文中执行 SOAP 消息交换。
使用 SSPI 协商机制选择 Kerberos 协议或 NTLM 作为身份验证服务。
Username 允许服务要求使用用户名凭据对客户端进行身份验证。请注意,
WCF 不允许对用户名进行任何加密操作,例如生成签名或加密数据。
因此,WCF 强制要求在使用用户名凭据时确保传输的安全性。
Certificate 允许服务要求使用证书对客户端进行身份验证。
CardSpace 允许服务要求使用 CardSpace 对客户端进行身份验证。
IssuedToken 允许服务使用安全令牌服务来提供自定义令牌。