# OpenCerts 显示 Verified 但人不匹配：分开证书、颁发方与呈交者

整理：链小知（AI 辅助）
资料核对日期：2026-10-12
引用地址：https://lianxiaozhi.com/tools/guides/opencerts-saved-verification-issuer-presenter
难度：入门
核验方式：官方文档整理，未执行真实账户操作

用原文件和已有验证记录核对三类结果、证书姓名与业务认可颁发方，避免复制文件或渲染页面成为身份通行证。

## 使用工具
- [OpenCerts](https://lianxiaozhi.com/tools/opencerts) · [官方入口](https://opencerts.io/)

## 前置条件
- 准备本人有权查看的原OpenCerts文件、已有验证结果/界面记录、取得时间及期望颁发机构；优先在本地查看，不公开姓名、成绩或完整凭证。没有结果时只能完成字段整理，不能补造通过结论。
- 本篇按当前FAQ和v3文档、TrustVC固定2.15.4源码解释，未上传/验证任何个人证书。旧OA/新W3C访问DNS/DID、状态列表或链服务的权限与费用另核，不需要钱包私钥。

## 1. 保留原文件，确认不是打印或预览

先记录原文件取得渠道、文件名/格式及已有验证时间；另存原文件，不为修正姓名/成绩而改原JSON。PDF、截图或打印件只能显示内容，FAQ明确打印会丢失密码学保护，不能替代原OpenCerts文件。

若只有渲染页面，确认它对应原文件和已有验证结果。Renderer指南允许raw未签文档预览；能够看到姓名、成绩、Logo不证明文件通过验证，缺原文件/结果则标“只取得展示”。

核对结果：原文件、展示和已有验证记录分开，来源缺口明确。
依据：[OpenCerts FAQ：三类验证与呈交者](https://dev.opencerts.io/faq/)
依据：[OpenCerts Renderer：原始字段与新包装](https://docs.opencerts.io/docs/migrations/renderer_w3c_vc)

## 2. 识别格式后取正确的持有人字段

旧OA v2解包数据常见recipient.name；W3C VC/OpenCerts v3的证书正文在credentialSubject，例如credentialSubject.recipient.name。OA wrapped v3也可用credentialSubject，不能只看到v3字样就认定W3C。

按本机构schema实际字段读取持有人姓名；migration示例也可直接credentialSubject.name，不能将课程name当持有人。issuer、validFrom/validUntil与renderMethod在另一层，字段空白先核包装/renderer取值，不改文件“补回来”。

核对结果：已标文档格式、原姓名字段路径和缺字段原因，不把课程或issuer名字当人名。
依据：[OpenCerts Renderer：原始字段与新包装](https://docs.opencerts.io/docs/migrations/renderer_w3c_vc)
依据：[OpenCerts v3：OA 到 TrustVC](https://docs.opencerts.io/docs/migrations/oa_to_trustvc)

## 3. 把三类结果逐项列出而不只看绿色标签

从已有结果保存完整性、颁发方身份、文档状态对应fragment的type/name/status与reason/data。TrustVC verifyDocument返回fragment数组；旧OpenCert汇总默认检查DOCUMENT_INTEGRITY、ISSUER_IDENTITY、DOCUMENT_STATUS三类，单个VALID片段不是整体有效。

保留INVALID、ERROR、SKIPPED及缺结果的区别。旧处理代码若只指定部分types，不能标三类全部通过；空fragment或空types在固定isValidOpenCert会抛错，不是自动有效。没有原数组时仅引用已有界面状态，并标细分未取得。

核对结果：三项各有原证据/未知，汇总配置未跳过必要项。
依据：[OpenCerts FAQ：三类验证与呈交者](https://dev.opencerts.io/faq/)
依据：[TrustVC 固定 verifyDocument 路由](https://raw.githubusercontent.com/TrustVC/trustvc/25007968939db4c40231fcfea8b426e33892e6d9/src/core/verify.ts)
依据：[TrustVC 固定 OpenCert 验证汇总与旧 Registry](https://raw.githubusercontent.com/TrustVC/trustvc/25007968939db4c40231fcfea8b426e33892e6d9/src/open-cert/verify.ts)

## 4. 确认 issuer 是认可机构而不只可解析 DID

对已有issuer记录核完整域名/DID与该机构公开说明。W3C issuer可字符串或对象id；固定W3CIssuerIdentity要求issuerId等于proof.verificationMethod的#前部分，并尝试DID解析。匹配与解析成功仍不能独立证明现实机构资质或本业务认可它。

旧OA的DNS-TXT/DocumentStore与W3C did:web不同；不能用合约name、Logo或任意可解析DID替代颁发机构身份核对。旧Verifier页仍讲Registry，但已明确ceased，旧VALID记录/兼容源码不是注册服务现行保证。

核对结果：原issuer、签名方法身份和期望机构相符或列待核，历史Registry不当现行证据。
依据：[TrustVC W3CIssuerIdentity：DID 对齐与解析](https://raw.githubusercontent.com/TrustVC/trustvc/25007968939db4c40231fcfea8b426e33892e6d9/src/verify/fragments/issuer-identity/w3cIssuerIdentity.ts)
依据：[OpenCerts Verifier：旧 Registry 规则](https://docs.opencerts.io/docs/verifier)
依据：[OpenCerts v3：OA 到 TrustVC](https://docs.opencerts.io/docs/migrations/oa_to_trustvc)

## 5. 核状态结果和时点，区分撤销与读取失败

已有W3CCredentialStatus结果中，INVALID的REVOKED/SUSPENDED与ERROR需分开：固定代码有列表处理错误会返回ERROR，不能等同撤销。W3CEmptyCredentialStatus的VALID来自“没有/空status配置且是signed结构”分支，并未查询撤销列表。

同时查看validFrom/validUntil等原字段和验证时间；状态列表可能更新，旧截图不证明当前有效。只有ERROR、网络失败或缺数据时向机构提供脱敏错误和格式，不编辑credentialStatus或重新签发；“真实但已撤销”也不能写当前有效。

核对结果：撤销机制、结果、有效期和读取时点分别有证据；未查状态明确标出。
依据：[OpenCerts FAQ：三类验证与呈交者](https://dev.opencerts.io/faq/)
依据：[TrustVC W3CCredentialStatus：VALID、INVALID、ERROR](https://raw.githubusercontent.com/TrustVC/trustvc/25007968939db4c40231fcfea8b426e33892e6d9/src/verify/fragments/document-status/w3cCredentialStatus.ts)
依据：[TrustVC EmptyStatus：缺撤销配置边界](https://raw.githubusercontent.com/TrustVC/trustvc/25007968939db4c40231fcfea8b426e33892e6d9/src/verify/fragments/document-status/w3cEmptyCredentialStatus/index.ts)
依据：[OpenCerts Renderer：原始字段与新包装](https://docs.opencerts.io/docs/migrations/renderer_w3c_vc)
依据：[TrustVC 错误文案与旧链条件](https://raw.githubusercontent.com/TrustVC/trustvc/25007968939db4c40231fcfea8b426e33892e6d9/src/utils/errorMessages/VerificationErrorMessages.ts)

## 6. 单独匹配呈交者，交付有限结论

将证书recipient与呈交人的已有授权身份材料按业务规则匹配；同名仍需业务所需的独立材料。FAQ明确文件可复制，证书验证不能自动认证谁拿着该文件，也不能代替资格审批。

最终按原文件/完整性、认可issuer、状态机制/时点、持有人匹配四列总结。缺一列标未核，不将“文件真实”扩大为“呈交者本人/一定有资格”。有错误保留原代码与脱敏时间，不包含密钥或完整私人凭证。

核对结果：证书有效与人/业务资格分开，得到可追溯检查表。
依据：[OpenCerts FAQ：三类验证与呈交者](https://dev.opencerts.io/faq/)
依据：[TrustVC W3CCredentialStatus：VALID、INVALID、ERROR](https://raw.githubusercontent.com/TrustVC/trustvc/25007968939db4c40231fcfea8b426e33892e6d9/src/verify/fragments/document-status/w3cCredentialStatus.ts)
依据：[TrustVC W3CIssuerIdentity：DID 对齐与解析](https://raw.githubusercontent.com/TrustVC/trustvc/25007968939db4c40231fcfea8b426e33892e6d9/src/verify/fragments/issuer-identity/w3cIssuerIdentity.ts)

## 常见错误
- 原文件复制不会自动改变受保护姓名；复制者不因此获得持有人身份。
- Renderer可以读raw预览，显示正常不是验签。
- 缺credentialStatus、列表读取ERROR、明确撤销和有效期结束是不同情况。

## 完成检查
- 形成原文件—三验证—issuer认可—状态时点—持有人匹配的有限记录。
- 只整理已有授权材料；本教程为文档核验，未上传私人凭证或确认真实持有人/当前状态。

## 相关知识
- [原始、解码和整理后的链上数据有什么区别？](https://lianxiaozhi.com/learn/raw-decoded-curated-data)
- [把数据上链，与只保存数据哈希有什么区别？](https://lianxiaozhi.com/learn/data-onchain-vs-offchain)

## 官方依据
- [OpenCerts FAQ：三类验证与呈交者](https://dev.opencerts.io/faq/)
- [OpenCerts Renderer：原始字段与新包装](https://docs.opencerts.io/docs/migrations/renderer_w3c_vc)
- [OpenCerts v3：OA 到 TrustVC](https://docs.opencerts.io/docs/migrations/oa_to_trustvc)
- [TrustVC 固定 verifyDocument 路由](https://raw.githubusercontent.com/TrustVC/trustvc/25007968939db4c40231fcfea8b426e33892e6d9/src/core/verify.ts)
- [TrustVC 固定 OpenCert 验证汇总与旧 Registry](https://raw.githubusercontent.com/TrustVC/trustvc/25007968939db4c40231fcfea8b426e33892e6d9/src/open-cert/verify.ts)
- [TrustVC W3CIssuerIdentity：DID 对齐与解析](https://raw.githubusercontent.com/TrustVC/trustvc/25007968939db4c40231fcfea8b426e33892e6d9/src/verify/fragments/issuer-identity/w3cIssuerIdentity.ts)
- [OpenCerts Verifier：旧 Registry 规则](https://docs.opencerts.io/docs/verifier)
- [TrustVC W3CCredentialStatus：VALID、INVALID、ERROR](https://raw.githubusercontent.com/TrustVC/trustvc/25007968939db4c40231fcfea8b426e33892e6d9/src/verify/fragments/document-status/w3cCredentialStatus.ts)
- [TrustVC EmptyStatus：缺撤销配置边界](https://raw.githubusercontent.com/TrustVC/trustvc/25007968939db4c40231fcfea8b426e33892e6d9/src/verify/fragments/document-status/w3cEmptyCredentialStatus/index.ts)
- [TrustVC 错误文案与旧链条件](https://raw.githubusercontent.com/TrustVC/trustvc/25007968939db4c40231fcfea8b426e33892e6d9/src/utils/errorMessages/VerificationErrorMessages.ts)
