使用 HTTP 作为传输时,安全套接字层 (SSL) 实现提供安全性。 SSL 在 Internet 上广泛使用,对客户端的服务进行身份验证,然后向通道提供机密性(加密)。 本文介绍 SSL 的工作原理及其在 Windows Communication Foundation(WCF)中的实现方式。
基本 SSL
SSL 的工作原理最好通过典型方案(在本例中是银行的网站)进行解释。 站点允许客户使用用户名和密码登录。 经过身份验证后,用户可以执行交易,例如查看帐户余额、支付账单以及将资金从一个帐户移到另一个帐户。
当用户首次访问站点时,SSL 机制将开始与用户的客户端(在本例中为 Web 浏览器)进行一系列协商,称为 握手。 SSL 首先向客户验证银行站点。 这是一个重要步骤,因为客户必须首先知道他们正在与实际网站通信,而不是试图诱骗他们键入用户名和密码的欺骗。 SSL 使用受信任的颁发机构提供的 SSL 证书(如 VeriSign)来执行此作。 逻辑如下所示:VeriSign 为银行站点的标识提供担保。 由于浏览器信任 VeriSign,因此站点受信任。 如果要使用 VeriSign 进行检查,也可以通过单击 VeriSign 徽标来执行此作。 这将显示一份含有到期日期以及接受方(银行网站)的真实性声明。
为了启动安全会话,客户端向服务器发送相当于“hello”的问候消息,并附上一份它可以用来进行签名、生成哈希、加密和解密的加密算法列表。 作为响应,该网站发送回一个确认以及它对算法套件之一的选择。 在该初次握手期间,双方都发送和接收 Nonce。 nonce 是随机生成的数据片段,与站点公钥结合使用来创建哈希。 哈希是使用标准算法(如 SHA1)从两个数字派生的新数字。 (客户端和站点还交换消息,以同意要使用的哈希算法。哈希是唯一的,仅用于客户端和站点之间的会话来加密和解密消息。 由于客户端和服务端都拥有原始nonce和证书的公钥,因此双方可以生成相同的哈希值。 因此,客户端通过使用约定的算法计算数据中的哈希,并将其与服务发送的哈希进行比较来验证哈希;如果两者匹配,则客户端可确认哈希未被篡改。 然后,客户端可以使用此哈希作为密钥来加密包含另一个新哈希的消息。 服务可以使用哈希解密消息,并恢复此第二到最终哈希。 这样,通信双方就都获知累积的信息(Nonce、公钥和其他数据),并且可以创建最后一个哈希(也称主密钥)。 此最终密钥通过倒数第二个哈希进行加密。 然后,主密钥用于加密和解密会话其余部分的消息。 由于客户端和服务都使用相同的密钥,因此也称为 会话密钥。
会话密钥也称为对称密钥或“共享机密”。拥有对称密钥非常重要,因为它减少了事务双方所需的计算。 如果每个消息都要求对 Nonce 和哈希进行新的交换,那么性能将会下降。 因此,SSL 的最终目标是使用对称密钥,允许消息在双方之间自由流动,具有更大的安全性和效率。
前面的说明是所发生情况的简化版本,因为协议可能因站点到站点而异。 还有一种可能,就是客户端和网站都在握手期间生成在算法上相结合的 Nonce,以增加数据交换过程的复杂性,从而为该过程提供更多的保护。
证书和公钥基础结构
在握手期间,服务还会将其 SSL 证书发送到客户端。 证书包含信息,例如其到期日期、颁发机构以及站点的统一资源标识符(URI)。 客户端将 URI 与最初联系的 URI 进行比较,以确保匹配,并检查日期和颁发机构。
每个证书都有两个密钥、一个私钥和一个公钥,这两个证书称为 交换密钥对。 简言之,仅当公钥可从证书读取时,证书的所有者才知道私钥。 任一密钥都可用于加密或解密摘要、哈希或其他密钥,但只能用于相对操作。 例如,如果客户端使用公钥进行加密,则只有站点可以使用私钥解密消息。 同样,如果站点使用私钥进行加密,则客户端可以使用公钥进行解密。 这为客户端提供保证,消息仅与私钥的拥有者交换,因为只有使用私钥加密的消息才能使用公钥解密。 网站确信它正在与使用公钥加密的客户端交换消息。 然而,这种交换仅对初次握手是安全的,因此在创建实际的对称密钥时要复杂得多。 不过,所有通信都依赖于具有有效 SSL 证书的服务。
使用 WCF 实现 SSL
HTTP 传输安全性(或 SSL)在 WCF 外部提供。 可以通过以下两种方式之一实现 SSL:决定因素是应用程序的托管方式:
如果使用 Internet Information Services (IIS) 作为 WCF 主机,请使用 IIS 基础结构设置 SSL 服务。
如果要创建自承载 WCF 应用程序,则可以使用 HttpCfg.exe 工具将 SSL 证书绑定到地址。
使用 IIS 实现传输安全性
IIS 7.0
若要将 IIS 7.0 设置为安全主机(使用 SSL),请参阅 在 IIS 7.0 中配置安全套接字层。
若要配置用于 IIS 7.0 的证书,请参阅 在 IIS 7.0 中配置服务器证书。
IIS 6.0
若要将 IIS 6.0 设置为安全主机(使用 SSL),请参阅 配置安全套接字层。
若要配置证书以用于 IIS 6.0,请参阅 Certificates_IIS_SP1_Ops。
将 HttpCfg 用于 SSL
如果要创建自承载 WCF 应用程序,请使用 HttpCfg.exe 工具。
有关使用 HttpCfg.exe 工具设置具有 X.509 证书的端口的详细信息,请参阅 如何:使用 SSL 证书配置端口。