证书简介

本文将讨论在通用 Windows 平台 (UWP) 应用中的证书使用情况。 在公钥加密中使用数字证书将公钥绑定到个人、计算机或组织。 绑定身份主要用于针对一个实体来验证另一个。 例如,证书通常用来为用户验证 Web 服务器和为 Web 服务器验证用户。 你可以创建证书请求并安装或导入已颁发的证书。 还可以按照证书层次结构注册证书。

共享的证书存储

UWP 应用将使用在 Windows 8 中引入的新 isolationist 应用程序模型。 在此模型中,应用将在低级操作系统结构(称为应用容器)中运行,除非明确允许,否则禁止应用访问除本身以外的资源或文件。 以下各节将介绍这对公钥基础结构 (PKI) 的含义。

证书按应用容器存储

应当在特定应用容器中使用的证书按用户和应用容器位置进行存储。 在应用容器中运行的应用仅对于它自己的证书存储具有写入访问权限。 如果该应用程序向其任何存储中添加证书,则这些证书不能由其他应用读取。 如果卸载某个应用,则特定于它的任何证书也会被删除。 应用也具有对本地计算机证书存储(MY 和 REQUEST 存储除外)的读取访问权限。

缓存

每个应用容器都有一个隔离缓存,其中可以存储进行核实所需的颁发者证书、证书吊销列表 (CRL) 和联机证书状态协议 (OCSP) 响应。

共享证书和密钥

在将智能卡插入读卡器中时,智能卡上包含的证书和密钥会传播到用户的 MY 存储中,在该存储中,这些证书和密钥可以由用户正在运行的任何完全信任应用共享。 但是,默认情况下,应用容器对于用户的 MY 存储没有访问权限。

为了解决此问题并允许多组主体访问多组资源,应用容器隔离模型支持“功能”这一概念。 功能允许应用容器进程访问特定的资源。 sharedUserCertificates 功能授予应用容器对用户 MY 存储和智能卡受信任根存储中所包含的证书和密钥的读取访问权限。 该功能不会授予对用户 REQUEST 存储的读取访问权限。

在下面的示例中,将在清单中指定 sharedUserCertificates 功能。

<Capabilities>
    <Capability Name="sharedUserCertificates" />
</Capabilities>

证书字段

X.509 公钥证书标准已经随着时间的过去经过了修订。 每一个继承版本的数据结构都保留了以前版本中存在的字段,并且增加了更多字段,如下图所示。

x.509 证书版本 1、2 和 3

在使用 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 日开始的日期使用普通时间格式 (yyyymmddhhmmssz)。
使用者 包含实体的 X.500 可分辨名称,该实体与证书中包含的公钥相关联。
公钥 包含公钥和关联的算法信息。

版本 2 字段

X.509 版本 2 证书包含版本 1 中定义的基本字段并添加了以下字段。

字段 说明
颁发者唯一标识符 包含一个唯一值,在一段时间内由不同的实体重用时可用于唯一标记证书颁发机构的 X.500 名称。
使用者唯一标识符 包含一个唯一值,在一段时间内由不同的实体重用时可用于唯一标记证书使用者的 X.500 名称。

版本 3 扩展

X.509 版本 3 证书包含版本 1 和版本 2 中定义的字段并添加了证书扩展。

字段 说明
授权密钥标识符 标识证书颁发机构 (CA) 公钥,与用于签署证书的 CA 私钥对应。
基本约束 指定实体是否可用作 CA,如果可以,则指定在证书链中该 CA 下可以存在的从属 CA 的数量。
证书策略 指定颁发证书的策略和使用证书的目的。
CRL 分发点 包含基本证书吊销列表 (CRL) 的 URI。
增强型密钥用法 指定证书中包含的公钥的使用方式。
颁发者备用名称 为证书请求颁发者指定一个或多个备用名称形式。
密钥用法 指定证书中包含的公钥可以执行的操作的限制。
名称约束 指定证书层次结构中所有使用者名称必须位于的命名空间。 扩展仅在 CA 证书中使用。
策略约束 通过禁止策略映射或通过要求层次结构中的每个证书包含一个可接受的策略标识符来约束路径验证。 扩展仅在 CA 证书中使用。
策略映射 指定与发证 CA 中的策略对应的从属 CA 中的策略。
私钥使用周期 为私钥指定与私钥关联的证书不同的验证周期。
使用者可选名称 为证书请求使用者指定一个或多个备用名称形式。 示例备用形式包括电子邮件地址、DNS 名称、IP 地址和 URI。
使用目录属性 传达标识属性,如证书使用者的国籍。 扩展值是 OID 值对序列。
使用者密钥标识符 区分证书使用者持有的多个公钥。 扩展值一般是密钥的 SHA-1 哈希。