对安全网络通信使用 SSL
为了进行安全网络通信,Windows CE 还支持 SSL 版本 2.0 和 3.0 的安全性协议,可以通过 WinInet 或直接通过 WinSock 来使用这些协议。这些应用程序使用安全套接字来发送和接收通信线路上的编码数据。
安全套接字依靠身份验证来确定是否可以信任远程主机。远程主机通过从证书颁发机构 (CA) 获取证书,来建立自己的信任度。同样,CA 可能会从高一级的机构获取证书,依此类推,建立一条信任链。要确定证书是否可靠,应用程序必须确定根 CA 的身份,然后再确定其是否可靠。
Windows CE 3.0 SSL 维护信任 CA 的数据库,该数据库独立于 CryptoAPI 2.0 证书存储区。当应用程序试图建立安全连接时,Windows CE 3.0 从证书链中提取根证书,并根据 CA 数据库进行检查。它通过证书验证回调函数将服务器证书和根据 CA 数据库得到的比较结果传递给应用程序。
最终,应用程序负责验证是否可以接受证书。应用程序可以接受或拒绝任何证书。如果某证书被拒绝,则连接建立失败。证书至少要满足两个条件:证书是当前使用的;证书代表的身份与正在建立连接的目标实体的身份相匹配。通道 CA 数据库中包括根证书颁发机构的列表。注意,这些根证书颁发机构是有一定期限的,可能需要定期更新。也可以通过编辑注册表来更新数据库,以添加更多的 CA。
在 Windows CE 3.0 Schannel CA 数据库中包含下列根证书颁发机构:
- VeriSign/RSA Secure Server
- VeriSign Class 1 Public Primary CA
- VeriSign Class 2 Public Primary CA
- VeriSign Class 3 Public Primary CA
- GTE Cybertrust ROOT
- Thawte Personal Basic CA
- Thawte Personal Freemail CA
- Thawte Personal Premium CA
- Microsoft Root Authority
- Root SGC Authority
- Entrust.net Secure Server CA
- Entrust.net Premium Secure Server CA
使用 CryptoAPI 加密数据
通过 CryptoAPI 提供的服务,应用程序开发人员可以添加数据加密/解密方案、使用数字证书进行身份验证、为基于 Win32 的应用程序进行 ASN.1 的编码或解码操作。应用程序开发人员无需了解内部的实现细节,即可使用 CryptoAPI 中的函数。CryptoAPI 与许多执行实际加密功能(例如,加密、解密、密钥存储和安全性)的加密服务提供者 (CSP) 协同工作。
Microsoft 加密系统包含三个要素:操作系统、应用程序和 CSP。应用程序通过 CryptoAPI 层与操作系统通信,操作系统则通过加密服务提供者接口 (CSPI) 与 CSP 通信。下图说明了这一点。

图 2:应用程序通过 CryptoAPI 层与操作系统通信,操作系统通过加密服务提供者接口 (CSPI) 与 CSP 通信。
CSP 是实现所有加密操作的独立模块,通常是一个 DLL。理想情况下,CSP 是一个与应用程序无关的模块,因此任何应用程序运行的都是同一种 CSP。但是,实际上某些有特定要求的应用程序需要定制的 CSP。EOM 可以编写自己的 CSP 包并将其添加到注册表中。
下表介绍 Windows CE 3.0 中包含的两种预定义的 CSP。
| CSP |
说明 |
| RSA 基本提供者 |
支持数字签名和数据加密,是多用途的加密工具。 |
| RSA 增强提供者 |
支持 128 位的密钥加密。通过扩展密钥长度和附加算法提供更强大的安全性。 |
应用程序可以使用 CryptoAPI 函数执行下列操作:
- 生成和交换密钥。
- 加密和解密数据。
- 编码和解码证书。
- 管理和保证证书的安全性。
- 创建和验证数字签名,并计算散列。
CryptoAPI 1.0 在 Windows CE 3.0 中提供的功能与在 Windows 2000 和 Windows NT 中提供的功能很相似;但是,仅支持 CryptoAPI 2.0 的子集。Windows CE 3.0 支持 CryptoAPI 2.0 的下列功能:基于 X.509 标准对数字证书进行编码和解码,以及管理证书。不支持下列功能:管理验证字撤销列表 (CRL) 和验证字信任列表 (CTL) 的工具、低级消息传递函数和简化的消息传递函数。
Coredll.lib 导出 CryptoAPI 1.0 函数;Crypto32.lib 导出 CryptoAPI 2.0 函数;所有这些函数都在 Wincrypt.h 头文件中定义。