
# 文档签名验证
接下来，我们将介绍证明文档的验证过程。当您从QingTianHypervisor请求证明文档时，您将会收到一个包含已签名证明文档的二进制blob。已签名的证明文档是一个由CBOR编码，COSE签名的对象。整个验证过程包括以下几个步骤：
1. 解码CBOR对象并将其映射到COSE_Sign1结构中
2. 从COSE_Sign1结构中提取证明文档
3. 验证证书文档中CA证书链的有效性
4. 验证证明文档的数字签名的有效性
证明文档由华为云QingTianAttestation PKI签署。华为云QingTian根证书可以从<https://qingtian-enclave.obs.myhuaweicloud.com/huawei_qingtian-enclaves_root-G1.zip>下载获取，该压缩文件的SHA256的摘要值为：
```
99e9203a64cfb0c6495afd815051e97bea8a37895dc083d715674af64adeadfe
```
QingTianAttestation PKI根证书的有效期为30年，根证书主体（Subject）的格式如下：
```
CN=huaweicloud.qingtian-enclaves, C=CN, O=Huawei Technologies, OU=Huawei Cloud
```
#### COSE与CBOR
COSE_Sign1签名结构通常被使用在为消息进行单一签名的场景，其内容和签名的相关参数都放在受保护的header中。COSE_Sign1数据结构是一个CBOR数组，该数组包括如下字段：
```
[
    protected header;        // 被保护的header信息 
    unprotected header;  // 不被保护的header信息 
    payload;             // 被签名的数据，attestation doc的CBOR封装数据 
    signature;           // 签名 
]
```
在证明文档的上下文中，该数组示例为：
```
18(                     // COSE_Sign1 CBOR标签 
  {1: -35},              // 算法: ECDS 384 
  {},                    // 空 
  attestation doc,       // 证明文档 
  signature,                 // 签名 
)
```
#### 验证证书
验证证书链是证书有效性验证过程中不可或缺的一部分。证明文档中的CA Bundle包含了根证书和中间证书的证书列表，并按以下顺序提供：
```
[ ROOT_CERT - INTERM_1 - INTERM_2 ... -INTERM_N ]
     0              1            2                N
```
为了验证目标证书TARGET_CERT（即证明文档中的Certificate）的有效性，对于某些证书验证工具而言，您可能需要按如下顺序构造证书验证列表：
```
[ TARGET_CERT - INTERM_N - INTERM_N-1 ... - ROOT_CERT]
```
