OpenSSL自签名证书过期后RSA_verify仍成功的技术咨询
为什么过期证书对应的RSA签名仍能通过验证?
这个问题其实是混淆了RSA签名验证的核心逻辑和X.509证书的信任属性,我来给你拆解清楚:
RSA签名/验证只关心密钥对的数学有效性,和证书有效期无关
RSA_sign是用私钥对数据生成签名,RSA_verify是用对应的公钥来校验签名是否匹配——这个过程是纯密码学运算,只依赖密钥对的数学正确性(私钥能正确生成签名,公钥能正确解密并比对),完全不涉及X.509证书里的有效期字段。证书过期只是意味着这个证书不再能作为「公钥归属某个身份」的可信凭证(比如HTTPS场景里浏览器会提示证书过期),但公钥和私钥本身的密码学有效性并没有消失。你的
cert.pem包含了完整的密钥对,签名验证直接用密钥而非证书属性
你通过cat server.crt server.key > cert.pem把证书和私钥合并成了一个文件,当你用这个文件进行RSA_sign时,实际是读取里面的私钥完成签名;而RSA_verify时,也是读取对应的公钥(从证书或私钥中导出)来做校验——整个过程根本不会去读取或验证证书里的NotAfter(过期时间)字段,自然不会因为证书过期而验证失败。补充:证书有效期的校验只发生在信任链场景
只有在需要验证身份可信度的场景(比如TLS握手、代码签名的信任校验),才会检查证书的有效期、颁发机构、吊销状态等元数据。而单纯的RSA_sign/RSA_verify是底层的密码学原语操作,不涉及任何PKI体系的信任校验逻辑。
内容的提问来源于stack exchange,提问作者poohgr8
相关产品推荐
相关产品推荐

