一证书校验的流程在TLS/SSL握手阶段完整的证书校验流程如下客户端发送ClientHello消息包含支持的TLS版本、加密套件等信息服务端响应ServerHello消息并附带完整的证书链通常包括叶子证书和中间证书客户端操作系统或应用内置的信任库会进行以下校验证书链完整性验证检查中间证书是否由可信根证书签发有效期检查确认证书在有效期内域名匹配验证证书中的CN或SAN字段是否包含请求的域名CRL/OCSP检查可选查询证书吊销状态若任一校验失败客户端将终止连接并抛出安全警告二系统默认的证书校验操作系统默认会执行多层校验基础校验证书格式合规性检查签名算法强度验证有效期检查Not Before/Not After中级校验证书链验证从叶子证书到根证书的完整链路主机名验证支持精确匹配和通配符匹配高级校验可选配置证书透明度CT日志验证证书策略CP/CPS检查三服务端返回的证书信息现代Web服务器返回的证书包通常包含主证书叶子证书包含服务器公钥明确绑定的域名CN/SAN由中间CA签发中间证书Intermediate CA用于构建证书链由根CA签发扩展信息可选OCSP响应SCT证书透明度证明根证书通常不包含在服务器响应中因为主流操作系统和浏览器都内置了常见根证书库。四证书层级关系详解典型的三层证书体系根证书Root CA自签名证书预装在操作系统/浏览器中示例DigiCert Global Root CA中间证书Intermediate CA由根证书签发可以签发多个叶子证书示例DigiCert SHA2 Secure Server CA叶子证书End-entity绑定具体域名包含服务器公钥示例api.example.com的SSL证书这种层级设计既保证了安全性根证书离线存储又提供了灵活性中间证书可轮换。五证书类型识别方法可通过以下字段区分证书类型根证书Issuer: CNDigiCert Global Root CA, OUwww.digicert.com, ODigiCert Inc, CUS Subject: CNDigiCert Global Root CA, OUwww.digicert.com, ODigiCert Inc, CUSIssuer和Subject相同中间证书Issuer: CNDigiCert Global Root CA Subject: CNDigiCert SHA2 Secure Server CAIssuer指向根证书Subject为中间CA名称六证书校验技术详解DERDistinguished Encoding RulesASN.1的二进制编码格式浏览器实际传输的证书格式查看方法openssl x509 -in cert.crt -inform der -text指纹校验Certificate Fingerprint// 计算示例 MessageDigest md MessageDigest.getInstance(SHA-256); byte[] digest md.digest(cert.getEncoded()); String fingerprint bytesToHex(digest); // 转换为HEX字符串特点证书任何改动都会改变指纹适用于严格固定证书场景SPKISubject Public Key InfoPin# 计算示例 from hashlib import sha256 import base64 pubkey cert.public_key().public_bytes( encodingserialization.Encoding.DER, formatserialization.PublicFormat.SubjectPublicKeyInfo ) pin base64.b64encode(sha256(pubkey).digest())优势允许证书轮换只要公钥不变兼容证书自动续期七证书校验最佳实践生产环境推荐组合方案基础层系统默认校验证书链域名增强层SPKI Pin防止中间人攻击监控层证书透明度校验预防错误签发Unity证书校验实现增强型校验示例using System.Security.Cryptography; using System.Security.Cryptography.X509Certificates; class CustomCertificateHandler : CertificateHandler { // 可信指纹库可配置多个备份证书 private static readonly HashSetstring TRUSTED_FINGERPRINTS new() { E3:5D:28:41:..., // 主证书 A1:B2:C3:D4:... // 备用证书 }; protected override bool ValidateCertificate(byte[] certificateData) { #if UNITY_EDITOR || DEVELOPMENT_BUILD return true; // 开发环境跳过校验 #endif try { using var cert new X509Certificate2(certificateData); // 基础校验 if (DateTime.Now cert.NotBefore || DateTime.Now cert.NotAfter) return false; // 增强校验 var fingerprint cert.GetCertHashString(HashAlgorithmName.SHA256); return TRUSTED_FINGERPRINTS.Contains(fingerprint); } catch { return false; } } }实现建议使用哈希集合支持多证书添加有效期二次验证区分开发/生产环境错误处理机制
Unity 证书校验
发布时间:2026/6/5 2:09:08
一证书校验的流程在TLS/SSL握手阶段完整的证书校验流程如下客户端发送ClientHello消息包含支持的TLS版本、加密套件等信息服务端响应ServerHello消息并附带完整的证书链通常包括叶子证书和中间证书客户端操作系统或应用内置的信任库会进行以下校验证书链完整性验证检查中间证书是否由可信根证书签发有效期检查确认证书在有效期内域名匹配验证证书中的CN或SAN字段是否包含请求的域名CRL/OCSP检查可选查询证书吊销状态若任一校验失败客户端将终止连接并抛出安全警告二系统默认的证书校验操作系统默认会执行多层校验基础校验证书格式合规性检查签名算法强度验证有效期检查Not Before/Not After中级校验证书链验证从叶子证书到根证书的完整链路主机名验证支持精确匹配和通配符匹配高级校验可选配置证书透明度CT日志验证证书策略CP/CPS检查三服务端返回的证书信息现代Web服务器返回的证书包通常包含主证书叶子证书包含服务器公钥明确绑定的域名CN/SAN由中间CA签发中间证书Intermediate CA用于构建证书链由根CA签发扩展信息可选OCSP响应SCT证书透明度证明根证书通常不包含在服务器响应中因为主流操作系统和浏览器都内置了常见根证书库。四证书层级关系详解典型的三层证书体系根证书Root CA自签名证书预装在操作系统/浏览器中示例DigiCert Global Root CA中间证书Intermediate CA由根证书签发可以签发多个叶子证书示例DigiCert SHA2 Secure Server CA叶子证书End-entity绑定具体域名包含服务器公钥示例api.example.com的SSL证书这种层级设计既保证了安全性根证书离线存储又提供了灵活性中间证书可轮换。五证书类型识别方法可通过以下字段区分证书类型根证书Issuer: CNDigiCert Global Root CA, OUwww.digicert.com, ODigiCert Inc, CUS Subject: CNDigiCert Global Root CA, OUwww.digicert.com, ODigiCert Inc, CUSIssuer和Subject相同中间证书Issuer: CNDigiCert Global Root CA Subject: CNDigiCert SHA2 Secure Server CAIssuer指向根证书Subject为中间CA名称六证书校验技术详解DERDistinguished Encoding RulesASN.1的二进制编码格式浏览器实际传输的证书格式查看方法openssl x509 -in cert.crt -inform der -text指纹校验Certificate Fingerprint// 计算示例 MessageDigest md MessageDigest.getInstance(SHA-256); byte[] digest md.digest(cert.getEncoded()); String fingerprint bytesToHex(digest); // 转换为HEX字符串特点证书任何改动都会改变指纹适用于严格固定证书场景SPKISubject Public Key InfoPin# 计算示例 from hashlib import sha256 import base64 pubkey cert.public_key().public_bytes( encodingserialization.Encoding.DER, formatserialization.PublicFormat.SubjectPublicKeyInfo ) pin base64.b64encode(sha256(pubkey).digest())优势允许证书轮换只要公钥不变兼容证书自动续期七证书校验最佳实践生产环境推荐组合方案基础层系统默认校验证书链域名增强层SPKI Pin防止中间人攻击监控层证书透明度校验预防错误签发Unity证书校验实现增强型校验示例using System.Security.Cryptography; using System.Security.Cryptography.X509Certificates; class CustomCertificateHandler : CertificateHandler { // 可信指纹库可配置多个备份证书 private static readonly HashSetstring TRUSTED_FINGERPRINTS new() { E3:5D:28:41:..., // 主证书 A1:B2:C3:D4:... // 备用证书 }; protected override bool ValidateCertificate(byte[] certificateData) { #if UNITY_EDITOR || DEVELOPMENT_BUILD return true; // 开发环境跳过校验 #endif try { using var cert new X509Certificate2(certificateData); // 基础校验 if (DateTime.Now cert.NotBefore || DateTime.Now cert.NotAfter) return false; // 增强校验 var fingerprint cert.GetCertHashString(HashAlgorithmName.SHA256); return TRUSTED_FINGERPRINTS.Contains(fingerprint); } catch { return false; } } }实现建议使用哈希集合支持多证书添加有效期二次验证区分开发/生产环境错误处理机制