在 SSL 中,时钟用于证书验证。客户端需要确保它与正确的服务器通信;为此,客户端将验证服务器的证书。验证意味着验证很多事情;其中两个涉及时钟:
服务器的证书(以及所有涉及的 CA 证书)必须在其有效时间范围内包含当前时间。每个证书作为一个notBefore
和一个notAfter
字段;当前时间必须介于这两个日期之间。
客户端应该通过从适当的颁发者(CA)获取(并验证)CRL(证书撤销列表)来获取每个证书的撤销状态。如果(特别是)CRL“不太旧”,则认为 CRL 是可接受的:同样,CRL 有一个thisUpdate
字段说明它是何时生成的,以及一个nextUpdate
或多或少用作 CRL 到期日期的字段。
如果客户端的时钟关闭,那么它将破坏这些功能中的一个或两个。例如,服务器的证书将被视为“长期过期”或“尚不可用”,从而导致拒绝。
接受客户端的时钟关闭意味着客户端被修改为忽略证书和 CRL 中的日期。安全的最终结果是,如果攻击者成功窃取了服务器的私钥,那么该攻击者将能够永远冒充该服务器。撤销的重点是要有一个经过验证的方法来从这种妥协中恢复;证书到期的目的是防止 CRL 无限增长。如果客户无视撤销和/或到期,那么原始后果是一旦发生妥协,那么你注定永远。这通常被认为是一件坏事。
更重要的是,这是客户端的问题,而不是服务器的问题。如果您操作服务器,那么正确验证您的证书是客户端的工作,而不是您的工作。如果客户真的坚持不安全地做事并且容易受到攻击,那么您就无法真正阻止它,至少在技术上不是(您可以通过合同来做事:如果客户的无能允许违反,客户应该为此付出代价)。
同样,如果客户端可以与您的服务器通信,则它们连接到某种网络,这意味着基于 Internet 的时间同步是可能的。对于某些嵌入式设备而言,要求准确的时钟具有挑战性,但对于联网的计算机(包括智能手机)则不应该如此。