证书选择和验证

这些 System.Net 类支持多种选择和验证 System.Security.Cryptography.X509Certificates 安全套接字层(SSL)连接的方法。 客户端可以选择一个或多个证书来向服务器进行身份验证。 服务器可以要求客户端证书具有一个或多个用于身份验证的特定属性。

定义

证书是一个 ASCII 字节流,其中包含公钥、属性(如版本号、序列号和到期日期)以及证书颁发机构的数字签名。 证书用于建立加密连接或向服务器验证客户端。

客户端证书选择和验证

客户端可以为特定 SSL 连接选择一个或多个证书。 客户端证书可与与 Web 服务器或 SMTP 邮件服务器的 SSL 连接相关联。 客户端将证书添加到集合 X509CertificateX509Certificate2 类对象。 以电子邮件为例,证书集合是一个与 X509CertificateCollection 类的 ClientCertificates 属性相关联的 SmtpClient 实例。 该 HttpWebRequest 类具有类似的 ClientCertificates 属性。

X509Certificate类和X509Certificate2类之间的主要区别在于X509Certificate类的私钥必须保存在证书存储中。

即使将证书添加到集合并与特定 SSL 连接相关联,也不会将证书发送到服务器,除非服务器请求这些证书。 如果在连接上设置了多个客户端证书,最佳证书将基于考虑服务器提供的证书颁发者列表与客户端证书颁发者名称之间的匹配的算法使用。

SslStream 类提供对 SSL 握手的更多控制。 客户端可以指定一个代理来选择使用哪个客户端证书。

远程服务器可以验证客户端证书是否有效、最新且由相应的证书颁发机构签名。 委托可以添加到 ServerCertificateValidationCallback 以强制执行证书验证。

客户端证书选择

.NET Framework 按以下方式选择要呈现给服务器的客户端证书:

  1. 如果以前向服务器提供客户端证书,则首次显示并重复使用后续客户端证书请求时,将缓存该证书。

  2. 如果存在委托,请始终使用委托的结果作为客户端证书的选择。 如果可能,请尝试使用缓存的证书,但如果委托返回 null 且证书集合不为空,则不要使用缓存的匿名凭据。

  3. 如果这是对客户端证书的第一次质询,Framework 将枚举与连接关联的 X509CertificateX509Certificate2 类对象中的证书,查找由服务器提供的证书颁布者列表与客户端证书颁布者名称之间的匹配。 匹配的第一个证书将发送到服务器。 如果没有证书匹配或证书集合为空,则将匿名凭据发送到服务器。

证书配置工具

许多工具可用于客户端和服务器证书配置。

Winhttpcertcfg.exe 工具可用于配置客户端证书。 Winhttpcertcfg.exe 工具作为 Windows Server 2003 资源工具包的工具之一提供。 此工具也可作为 windows Server 2003 资源工具包工具的一部分下载, www.microsoft.com

HttpCfg.exe 工具可用于配置HttpListener类的服务器证书。 HttpCfg.exe 工具作为 Windows Server 2003 和 Windows XP Service Pack 2 的支持工具之一提供。 默认情况下,HttpCfg.exe 和其他支持工具不会安装在 Windows Server 2003 或 Windows XP 上。 在 Windows Server 2003 上。 支持工具与 Windows Server 2003 CD-ROM 上的以下文件夹和文件分开安装:

\Support\Tools\Suptools.msi

若要与 Windows XP Service Pack 2 一起使用,可从 www.microsoft.com下载 Windows XP 支持工具。

HttpCfg.exe 工具版本的源代码也可用作 Windows Server SDK 的示例。 默认情况下, HttpCfg.exe示例的 源代码随网络示例一起安装,作为以下文件夹下的 Windows SDK 的一部分:

C:\Program Files\Microsoft SDKs\Windows\v1.0\Samples\NetDS\http\serviceconfig

除了这些工具, X509CertificateX509Certificate2 还提供从文件系统加载证书的方法。

另请参阅