Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 发送带有未来时间戳的证书_Java_Date_Certificate - Fatal编程技术网

Java 发送带有未来时间戳的证书

Java 发送带有未来时间戳的证书,java,date,certificate,Java,Date,Certificate,假设两个人运行相同的代码,第一个人创建了一个带有createDate和expireDate的证书,如果 createDate

假设两个人运行相同的代码,第一个人创建了一个带有createDate和expireDate的证书,如果

createDate
现在,如果第一个人为他发送此证书,它对世界各地落后8小时的其他人有效,对于第二个人,它将是无效的。在这种情况下,这个问题是如何解决的,或者是否有一项政策,如果我们希望第二个人能够在不等待8小时的情况下使用它,它应该是怎样的?

编辑:对不起,我不知道日期总是使用UTC时间。因此,无论何时您想要获取日期,都可以按如下方式访问:

import java.util.Date;

public class CurrentDateTime {
    public static String getCurrDateTime() {
        Date date = new Date();
        return date;
    }
}
您可以使用getCurrDateTime和其他一些日期方法获取createDate和expireDate并将它们保存到文件中,或者以您希望的方式存储它们,然后使用certificateValid方法检查currentDate是否介于两者之间

谢谢吉姆指出我的错误


注意:这可能很容易被欺骗/欺骗,因为它依赖于从客户机读取的时间,而该时间是提供给JVM的。因此,不要将其用于免费试用验证或类似用途。

处理X.509证书的RFC 5280指定了两种方法来编码证书中的有效时间:

UTCTime 一般化时间 两者都以GMT区域为参考。如果两种实现都使用正确的时区进行生成和检查,那么您的场景就不会出现问题


请参见

如果程序使用UTC时间,那么没有人会落后8小时。您认为证书的实施者可能没有考虑这些问题吗?证书在内部使用UTC。时区没有问题。如果通过证书,您指的是您的软件创建的某个自定义私有对象,如果它在内部不使用UTC,则必须修改它以使用UTC或面对这些问题。精彩的10分钟视频,@agillgillaI是正版的,@agillgilla。如果询问者的证书使用UTC,这在这里可能不太相关,但我肯定认为他在一段不太长且有趣的视频中包含了许多程序员应该知道的优点。我真的很喜欢。任何投了反对票的人都愿意解释我的帖子有什么问题吗?
public class DateCertificate {
    public static void createCertificate() {
        Date createDate = CurrentDateTime.getCurrDateTime();
        /* Save createDate to file or something */
    }

    public static boolean certificateValid() {
        Date currentDate = CurrentDateTime.getCurrDateTime();
        /* Get createDate and expireDate from file or something */
        return currentDate.after(createDate) && currentDate.before(expireDate);
    }
}