本文讨论 WinUI 应用中证书的使用。 数字证书用于公钥加密,将公钥绑定到人员、计算机或组织。 绑定标识最常用于向另一个实体进行身份验证。 例如,证书通常用于向用户验证 Web 服务器,并使用 Web 服务器对用户进行身份验证。 可以创建证书请求并安装或导入颁发的证书。 还可以在证书层次结构中注册证书。
共享证书存储
WinUI 应用使用 Windows 8 中引入的新隔离应用程序模型。 在此模型中,应用在低级别操作系统构造(称为应用容器)中运行,该构造禁止应用访问外部的资源或文件,除非明确允许这样做。 以下部分介绍了这对公钥基础结构(PKI)的影响。
每个应用容器的证书存储
用于特定应用容器的证书存储在每个用户、每个应用容器的特定位置中。 在应用容器中运行的应用仅对自己的证书存储具有写入访问权限。 如果应用程序将证书添加到其任何存储区,则其他应用无法读取这些证书。 如果卸载应用,则还会删除特定于应用的任何证书。 应用还具有对 MY 和 REQUEST 存储以外的本地计算机证书存储的读取访问权限。
缓存
每个应用容器都有一个独立缓存,它可以存储验证所需的颁发者证书、证书吊销列表(CRL)和联机证书状态协议(OCSP)响应。
共享证书和密钥
将智能卡插入读取器中时,卡中包含的证书和密钥将传播到用户 MY 存储中,用户运行的任何完全信任应用程序都可以共享这些证书和密钥。 但是,默认情况下,应用容器无权访问每个用户的 MY 存储。
为了解决此问题,并使主体实体组能够访问资源组,应用容器隔离模型支持能力概念。 此功能允许应用容器进程访问特定资源。 sharedUserCertificates 功能授予应用容器对用户 MY 存储和智能卡受信任根存储中包含的证书和密钥的读取访问权限。 此功能不会授予对用户 REQUEST 存储的读取访问权限。
在清单中指定 sharedUserCertificates 功能,如以下示例所示。
<Capabilities>
<Capability Name="sharedUserCertificates" />
</Capabilities>
证书字段
X.509 公钥证书标准随着时间的推移进行了修订。 数据结构的每个后续版本都保留了以前版本中存在的字段,并添加了更多字段,如下图所示。
使用 CertificateRequestProperties 类创建证书请求时,可以直接指定其中一些字段和扩展。 大多数人不能。 这些字段可由证书颁发机构填充,也可以将其留空。 有关字段的详细信息,请参阅以下部分:
版本 1 字段
| 领域 | 说明 |
|---|---|
| 版本 | 指定已编码证书的版本号。 目前,此字段的可能值为 0、1 或 2。 |
| 序列号 | 包含证书颁发机构 (CA) 分配给证书的正唯一整数。 |
| 签名算法 | 包含一个对象标识符(OID),该标识符指定 CA 用于对证书进行签名的算法。 例如,1.2.840.113549.1.1.5 指定 SHA-1 哈希算法与 RSA 实验室中的 RSA 加密算法相结合。 |
| 发行人 | 包含创建并签署证书的 CA 的 X.500 专有名称(DN)。 |
| 有效性 | 指定证书有效的时间间隔。 到 2049 年底的日期使用协调世界时(格林威治平均时间)格式(yymmddhhmmssz)。 从 2050 年 1 月 1 日起的日期使用通用时间格式(yyymmddhhmmssz)。 |
| 主题 | 包含一个 X.500 可分辨名称,该名称与证书中所包含公钥相关联的实体有关。 |
| 公钥 | 包含公钥和关联的算法信息。 |
版本 2 字段
X.509 版本 2 证书包含版本 1 中定义的基本字段,并添加以下字段。
| 领域 | 说明 |
|---|---|
| 颁发者唯一标识符 | 包含一个唯一值,该值可用于在一段时间内由不同实体重复使用时,使 CA 的 X.500 名称不含糊。 |
| 主体唯一标识符 | 包含一个唯一值,该值可用于使证书使用者的 X.500 名称在随着时间推移被不同实体重复使用时仍保持明确。 |
版本 3 的扩展
X.509 版本 3 证书包含版本 1 和版本 2 中定义的字段,并添加证书扩展。
| 领域 | 说明 |
|---|---|
| 权限密钥标识符 | 标识与用于对证书签名的 CA 私钥对应的证书颁发机构(CA)公钥。 |
| 基本约束 | 指定实体是否可以用作 CA,如果是,则指定证书链中可存在的从属 CA 的数量。 |
| 证书策略 | 指定颁发证书的策略及其用途。 |
| CRL 分发点 | 包含基本证书吊销列表(CRL)的 URI。 |
| 增强型密钥用法 | 指定可以使用证书中包含的公钥的方式。 |
| 颁发者可选名称 | 为证书请求的发布者指定一个或多个可选名称形式。 |
| 密钥用法 | 指定对可由证书中包含的公钥执行的操作的限制。 |
| 名称约束 | 指定证书层次结构中所有主题名称所在的命名空间。 该扩展仅在 CA 证书中使用。 |
| 策略约束 | 通过禁止策略映射或要求层次结构中的每个证书包含可接受的策略标识符来约束路径验证。 该扩展仅在 CA 证书中使用。 |
| 策略映射 | 指定从属 CA 中的策略,以对应颁发证书的 CA 中的策略。 |
| 私钥使用周期 | 为私钥指定与私钥关联的证书不同的有效期。 |
| 使用者可选名称 | 指定证书请求对象的一个或多个替代名称形式。 示例可选表单包括电子邮件地址、DNS 名称、IP 地址和 URI。 |
| 主体目录属性 | 传达标识属性,例如证书使用者的国籍。 扩展值是 OID 值对的序列。 |
| 使用者密钥标识符 | 区分证书使用者持有的多个公钥。 扩展值通常是键的 SHA-1 哈希。 |