OpenSSL报certificate rejected:error 28与CA辅助信任属性排查
根证书已经放进CAfile证书没过期OpenSSL却报certificate rejected。先别急着下载另一份fullchain这里的rejected不等于revoked。前者可能是本地信任材料明确拒绝某种用途后者才是吊销检查的结果。本文用隔离证书区分error 28、辅助信任属性和证书本体。一、先读完整错误不把28当成吊销OpenSSL的X509_V_ERR_CERT_REJECTED表示根CA被标记为拒绝指定用途。它与error 23的certificate revoked、error 20的构链失败、error 26的用途不兼容不是同一个问题。错误编号也不是Shell进程退出码本轮28对应verify退出2。临时根直签叶子的实验在depth 1报错存在中间CA时层级会变。先把错误前的subject与实际路径对应不把所有depth 1都叫根。二、先确认读到的CA文件和运行版本记录运行版本、工作目录及CAfile绝对路径。终端、容器和服务可能读取不同材料。下面root-reject.pem是单张CA工作副本不是系统文件。openssl version -a openssl x509 -in root-reject.pem -noout -text在文本末尾找Trusted Uses与Rejected Uses。实验中的拒绝属性显示TLS Web Server Authentication。PEM头可能是BEGIN TRUSTED CERTIFICATE但这个词不是“安全通行证”它也能封装明确拒绝用途的属性。x509通常只读取首张证书。CA包里有多张时应逐张核对条目、指纹、来源与辅助属性只看到第一张正常不能断言整包无拒绝项。不要将原始日志中的内部名称、路径和业务标识直接公开。三、把验证用途写清楚再复现同一故障下例假定已准备PEM叶证书leaf.pem、单张根CA工作副本并且叶子名称是占位域名service.example。若有中间CA需要另提供-untrusted链材料本例是根直签不能照搬成缺中间证书的生产配置。openssl verify -no-CApath -CAfile root-reject.pem \ -purpose sslserver -verify_hostname service.example leaf.pem-purpose sslserver检查服务器用途-verify_hostname检查名称-no-CApath避免默认CA目录掩盖对照。显式CAfile固定本次文件来源但仍要留意构建、配置与应用自己的验证选项。OpenSSL从1.1.0起未单独指定信任模型时会从purpose推导模型。本轮在1.1.1k FIPS构建中把-purpose删掉后同一拒绝材料竟能通过。这个“绿灯”不是修好了而是测试条件变了。排障最怕把考题删掉再宣布满分。正式验收应与应用用途一致不用取消用途检查解决28。四、为什么指纹相同验证结果却不同OpenSSL辅助信任属性保存在本地可信证书表示中不是CA签名覆盖的X.509扩展。证书本体相同不代表本地信任决策相同只比SHA-256证书指纹会漏掉这一层。下面只在独立实验目录对临时CA副本添加拒绝项不能对系统或生产CA执行。root.pem须是已有的实验CA命令不创建完整PKI也不是让读者把真实根证书加入黑名单。openssl x509 -in root.pem -addreject serverAuth \ -trustout -out root-reject.pem openssl x509 -in root-reject.pem -noout -sha256 -fingerprint openssl x509 -in root.pem -noout -sha256 -fingerprint本轮两份证书的指纹与证书DER均相同带serverAuth拒绝项的材料却验证失败。辅助属性不是证书签名或叶子EKU。指纹确认对象辅助属性确认本地策略要一起留档。五、用正反例区分策略问题与用途扩展实验用临时RSA根直签一张同时具有serverAuth和clientAuth用途的叶证书排除叶子EKU干扰。下表是本轮离线结果不代表所有TLS后端、系统证书库或浏览器行为。根CA工作副本验证条件本轮结果没有辅助属性sslserver通过退出0拒绝serverAuthsslservererror 28depth 1退出2拒绝clientAuthsslserver通过退出0拒绝clientAuthsslclienterror 28退出2同时信任和拒绝serverAuthsslserver仍为error 28再加一个trusted用途并不能抵消同用途的reject。也不要把Rejected Uses与证书里的Extended Key Usage混为一谈前者描述本地信任政策后者是签名证书中的扩展两者都可能影响验证但修复责任与材料来源不同。六、修复靠授权来源不靠清掉拒绝项如果拒绝项来自组织策略、CA撤信任或安全事件应停止使用该信任路径联系证书与信任库维护者确定允许的替代链。若是配置误发也应从受控来源恢复经过批准的材料记录变更原因和回滚版本而不是在客户端偷偷放宽政策。尤其小心“转一下PEM格式”。x509默认输出普通证书时可能丢弃辅助信任设置本轮把拒绝材料普通读写后服务器验证确实变成通过。这证明策略丢了不证明风险消失。需要保留可信表示时核对-trustout与完整属性别把格式转换当解除拒绝的捷径。下例在可信、任务专用目录运行root-approved.pem来自已批准来源日志路径不能被其他用户写入避免覆盖业务文件或跟随不可信软链接。if openssl verify -no-CApath -CAfile root-approved.pem \ -purpose sslserver -verify_hostname service.example \ leaf.pem verify.log 21; then printf %s\n 离线链验证通过仍需验收真实HTTPS else rc$? printf 验证或日志写入失败%s\n $rc 2 exit $rc fi本轮重放了四段正文命令正确材料通过拒绝CA、错误名称和日志路径无法打开均阻止相应验收通过。脚本保留失败退出码不因为日志文件存在就判成功。它只验离线链还没有完成网络请求。七、上线前按这张清单收口准确区分rejected与revoked保存错误号、depth、subject及进程退出码。核对实际CA来源、全部相关条目、辅助信任属性与应用用途不只比指纹。通过授权流程恢复信任材料不删purpose、不清拒绝项、不关闭验证。恢复后验证名称、用途、完整链再检查实际HTTPS终点、应用重载和业务响应。实验仅使用临时目录做离线验证证书与私钥已清理未修改系统信任库、时钟或服务。未实测生产HTTPS、浏览器及3.x运行时。3.0官方文档用于解释信任锚规则不把文档阅读冒充新版本实测。八、参考资料OpenSSL verify用途、信任模型与验证错误OpenSSL x509辅助信任属性与trustoutOpenSSL信任锚与正负信任属性