Total Pageviews

Thursday, 17 July 2014

服务器接口加密串规则含时间验证,且服务器间时间不同步的问题

发现公司的一个项目的一个含加密串的URL请求一直出现503错误,刚开始怀疑是不是服务器负载太大,因此不稳定。后来在同事提醒下,这个加密是跟时 间有关的。但是经过加密串内容的解析,发现时间和当前没有太大差距,且可允许时间长度是1天,也就是说只要加密串中包含的时间戳是1天内是正常的。因此开 始是没有怀疑这个时间戳有问题,后面多次调试后发现了一个规律:所有含加密串的URL在生成后一段时间内全部无法访问,但是过几分钟之后完全都正常。因此 再次怀疑是和时间有关,忽然脑袋瓜一激灵,允许加密串时间是1天内,但是是指加密串中的时间过去1天内有效,如果是验证服务器之后是不是就无效了?因此立 即查看生成加密串的服务器当前时间,发现比标准北京时间(其他服务器、本机电脑、手机网络同步后的时间一致,即假设为标准北京时间)快了足足1分钟多。因 此,立即调整生成加密串的服务器时间,然后再次生成加密串(含加密串的URL),这时无论刷新多少次,发现URL都访问正常了。
总结:当有多台服务器交互,且出现一些类似加密验证中出现时间戳的情况,一定要保证各服务器之间的时间同步,建议所有服务器都开启时间同步服务。当出现问题时,不仅要考虑某台服务器时间是否“滞后”,还要考虑“超前”的情况.