Linux OpenSSH忽略签名密钥创建时间或ssh-keygen设置早期签名日期咨询
回答
以下是对应你两个需求的落地方案:
1. 调整SSH密钥签名的有效期(更易实现,推荐)
ssh-keygen在签名密钥时支持通过-V参数显式指定证书的生效、过期时间,你可以直接设置远早于镜像编译时间的生效时间,以及足够覆盖设备生命周期的过期时间,从根源避免系统时间不准导致的校验失败。
示例签名命令如下:
ssh-keygen -s user_ca -I user_identity -n principal -V 19700101000000:21001231235959 id_rsa.pub
涉及的核心参数说明:
-s user_ca:指定用于签名的CA私钥-V validity_interval:指定证书有效期,格式为[生效时间]:[过期时间],示例中设置的1970年1月1日~2100年12月31日可覆盖绝大多数嵌入式设备的使用周期- 其余参数可根据你原有签名流程的需求保留,比如授权主体、密钥标识等
这种方案不需要修改SSH服务端配置,适配所有支持SSH证书的OpenSSH版本,改造成本最低。
2. 配置SSH服务端忽略证书时间校验
OpenSSH原生没有提供直接关闭证书时间校验的配置参数,有两种可行的实现路径:
- 启动sshd前先强制设置系统时间为一个固定的、晚于所有证书生效时间的基准值(比如镜像编译时间+1天),如果后续有NTP等时间同步服务再更新系统时间即可,这种方案不需要修改SSH组件
- 自行修改OpenSSH源码,删除
sshkey_cert_verify函数中对证书valid after、valid before字段的时间校验逻辑,重新编译后部署到设备中,这种方案需要一定的开发工作量,且后续升级OpenSSH版本需要重新合入补丁
注意:两种方案都会降低SSH证书的安全性,有效期超长的证书一旦泄露会带来长期的风险,修改源码关闭校验则会完全失去证书有效期的安全防护能力,请根据你的业务场景做好风险兜底。
内容的提问来源于stack exchange,提问作者IoTPanic
相关产品推荐
相关产品推荐

