跨区域SSH证书认证及UTC时间格式证书生成问题
跨区域SSH证书认证及UTC时间格式证书生成问题
我完全懂你这种跨时区踩坑的烦躁——在印度生成的SSH证书,拿到美国服务器用的时候,因为两地时区差了十几个小时,导致证书有效期完全不对,明明本地刚生成,服务器那边却显示还没到生效时间。用UTC时间统一时间基准确实是最靠谱的解决方案,咱们来把这个问题捋顺。
首先你说按照manpage的命令尝试却报错,大概率是时间格式的细节没卡准。ssh-keygen对UTC时间的格式要求非常严格,必须是YYYYMMDDHHMMSSZ这个固定格式,几个关键细节一定要注意:
- 年份必须是4位(比如2024,不能写24)
- 月份、日期、小时、分钟、秒都得是2位,不足的话要补0(比如4月要写04,凌晨0点要写00,30分就是30)
- 最后必须加大写的
Z来标识UTC时区,小写的z是不被识别的
拿你的场景举例:印度时间2024年4月26日00:30:00对应的UTC时间是2024年4月25日19:00:00(印度时区是UTC+5:30),2小时后的UTC时间是2024年4月25日21:00:00。那对应的正确生成命令应该是:
ssh-keygen -s ca -I my-identity -n us-username -V 20240425190000Z:20240425210000Z client.pub
如果还是提示格式错误,你可以先自查这几点:
- 有没有漏写数字(比如把2024写成24)
- 月份/日期/小时等是不是两位(比如把4月写成4而不是04)
- 最后有没有加大写的
Z
另外,如果你不确定本地时间对应的UTC时间,可以用命令快速生成标准格式的时间:
# 查看当前UTC时间 date -u +"%Y%m%d%H%M%SZ" # 查看2小时后的UTC时间 date -u -d "+2 hours" +"%Y%m%d%H%M%SZ"
直接把这些命令输出的结果复制到-V参数里,绝对不会出格式问题。
总的来说,核心就是用严格格式的UTC时间来设置证书有效期,这样不管生成证书的区域和目标服务器的时区是什么,时间基准都是统一的UTC,自然就不会出现时区导致的有效期不匹配问题了。
备注:内容来源于stack exchange,提问作者gowtham krishna




