最近,家里的神州老笔记本没电池了,要拆 C 面才能换主板电池,懒得动手,于是搞了个 Network Time 来做对时。主要是未搞对时之前,所有 https 的站点都用不了,老人家也抱怨炒股不行,崩溃了。。。这时候才知道,原来证书也是要验证时间的。

在 SSL 会话里,客户端需要验证服务器的身份,这是通过证书检查来完成的。证书验证中,会涉及跟时间相关的两点:

  • 服务器的证书(及涉及到的其他证书)的有效验证时间需要包含当前时间。每个证书都有 notBefore(不早于)和 notAfter(不晚于)字段,当前时间必须落在这两者之间。
  • 客户端需要验证证书的撤销情况。这是通过从 CA 获取 CRL(证书撤销链)来实现的。一个 CRL 只有在不太老的情况下才算是可接受的。同样,CRL 有 thisUpdate 字段,标记 CRL 生成时间,以及一个 nextUpdate 字段,大致相当于 CRL 的过期时间。

证书签发的过期时间对客户端的安全十分重要。假设服务器不幸被攻破,私钥被偷。通过 CRL 和证书自身有效期,大家可以及时修正泄密证书,防止被泄露的证书进行中间人攻击。所以,当主板电池挂掉的时候,安全往往难以受到保障。。

参考链接:What role does clock synchronization play in SSL communcation