创建过去日期为结束日期的自签名证书

兰德斯特

我想动态创建具有任意开始日期和结束日期(包括过去的结束日期)的自签名证书我更喜欢使用标准工具,例如OpenSSL,但是任何可以完成工作的工具都很棒。

堆栈溢出问题如何生成有效期少于一天的openssl证书?问一个类似的问题,但我希望我的证书是自签名的。

如果您想知道,证书是自动化测试所必需的。

瑞·里贝罗(Rui F Ribeiro)

过去有两种创建证书的方法。伪造时间(1)(2),或在签署证书时定义时间间隔(3)。

1)首先,关于伪造的时间:做一个节目觉得是从系统中不同的日期,看看libfaketimefaketime

要在Debian中安装它:

sudo apt-get install faketime

然后,您将faketimeopenssl命令之前使用

有关使用示例:

$faketime 'last friday 5 pm' /bin/date
Fri Apr 14 17:00:00 WEST 2017
$faketime '2008-12-24 08:15:42' /bin/date
Wed Dec 24 08:15:42 WET 2008

来自man faketime

给定的命令将被欺骗,使您相信当前系统时间是时间戳中指定的时间。除非另有说明,否则壁钟将从该日期和时间开始继续运行(请参阅高级选项)。实际上,faketime是libfaketime的简单包装,它使用LD_PRELOAD机制加载一个小的库,该库拦截对诸如time(2)和fstat(2)之类的系统调用。

因此,例如,根据您的情况,您可以很好地定义一个日期为2008年,然后创建一个有效期为2年(到2010年)的证书。

faketime '2008-12-24 08:15:42' openssl ... 

附带说明一下,该实用程序可以在包括MacOS在内的多个Unix版本中用作任何程序的包装(不是命令行专用的)。

需要说明的是,只有使用此方法加载的二进制文件(及其子进程)的时间才会更改,伪时间不会影响系统其余部分的当前时间。

2)如@Wyzard所述,您还拥有datefudge与用法非常相似软件包faketime

作为差异,datefudge不影响fstat(即,不更改文件时间的创建)。它还具有自己的库datefudge.so,可以使用LD_PRELOAD进行加载。

它也有一个-s static time位置,尽管过去了多少秒,但始终返回参考时间。

$ datefudge --static "2007-04-01 10:23" sh -c "sleep 3; date -R"
Sun, 01 Apr 2007 10:23:00 +0100

3)除了伪造时间以外,甚至更简单,您还可以在OpenSSL中对证书进行签名时定义证书有效期的起点和终点

您在问题中链接到的问题的误解是,证书有效性不是在请求时(在CSR请求中)定义的,而是在签名时定义的。

当使用openssl ca创建自签名证书,添加的选项-startdate-enddate

根据openssl的资料,这两个选项中的日期格式openssl/crypto/x509/x509_vfy.c为ASN1_TIME或ASN1UTCTime:格式必须为YYMMDDHHMMSSZ或YYYYMMDDHHMMSSZ。

报价openssl/crypto/x509/x509_vfy.c

int X509_cmp_time(const ASN1_TIME *ctm, time_t *cmp_time)
{
    static const size_t utctime_length = sizeof("YYMMDDHHMMSSZ") - 1;
    static const size_t generalizedtime_length = sizeof("YYYYMMDDHHMMSSZ") - 1;
    ASN1_TIME *asn1_cmp_time = NULL;
    int i, day, sec, ret = 0;

    /*
     * Note that ASN.1 allows much more slack in the time format than RFC5280.
     * In RFC5280, the representation is fixed:
     * UTCTime: YYMMDDHHMMSSZ
     * GeneralizedTime: YYYYMMDDHHMMSSZ
     *
     * We do NOT currently enforce the following RFC 5280 requirement:
     * "CAs conforming to this profile MUST always encode certificate
     *  validity dates through the year 2049 as UTCTime; certificate validity
     *  dates in 2050 or later MUST be encoded as GeneralizedTime."
     */

并且来自CHANGE日志(错误2038吗?)-此更改日志只是一个附加的脚注,因为它只涉及那些直接使用API​​的用户。

在1.1.0e和1.1.1之间进行更改[xx XXX xxxx]

*)添加ASN.1类型INT32,UINT32,INT64,UINT64以及以Z开头的变体。这是为了替换LONG和ZLONG并确保大小安全。不鼓励使用LONG和ZLONG,并计划在OpenSSL 1.2.0中弃用LONG和ZLONG。

因此,创建从2008年1月1日到2010年1月1日的证书的过程如下:

openssl ca -config /path/to/myca.conf -in req.csr -out ourdomain.pem \
-startdate 200801010000Z -enddate 201001010000Z

或者

openssl ca -config /path/to/myca.conf -in req.csr -out ourdomain.pem \
-startdate 0801010000Z -enddate 1001010000Z

-startdate-enddate确实出现在openssl源和“更改”日志中;正如@guntbert指出的那样,尽管它们没有出现在man openssl主页上,但它们也出现在man ca

-startdate date
       this allows the start date to be explicitly set. The format of the date is
       YYMMDDHHMMSSZ (the same as an ASN1 UTCTime structure).

   -enddate date
       this allows the expiry date to be explicitly set. The format of the date is
       YYMMDDHHMMSSZ (the same as an ASN1 UTCTime structure).

报价openssl/CHANGE

0.9.3a和0.9.4之间的变化[1999年8月9日]

*)将-startdate和-enddate(缺少)参数固定为“ ca”程序。

PS对于您从StackExchange引用问题的选择答案更改系统时间通常是个坏主意,尤其是在生产系统中;并且使用此答案中的方法,您在使用它们时不需要root特权。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

创建过去日期为结束日期的自签名证书

来自分类Dev

如何禁用daterangepicker中的过去日期?

来自分类Dev

禁用FullCalendar中的过去日期下降

来自分类Dev

如何禁用daterangepicker中的过去日期?

来自分类Dev

如果我无法在模型中禁止使用过去日期创建对象,如何在Rails上使用RSpec过去日期进行测试?

来自分类Dev

生成带有开始和结束日期的签名证书

来自分类Dev

如何找到过去日期以后n天的日期?

来自分类Dev

在日期列表中查找最接近的过去日期

来自分类Dev

OpenSSL自签名根CA证书:设置开始日期

来自分类Dev

在SQL Server上获取最近的过去日期值

来自分类Dev

输出过去日期和今天之间的时间php

来自分类Dev

文件创建日期如何是过去的日期?

来自分类Dev

如何在引导日期时间选择器中禁用今天的过去日期?

来自分类Dev

如何在Eonasdan引导程序datetimepicker中禁用日期范围的过去日期?

来自分类Dev

MySQL选择从给定日期起大于或等于最近的过去日期的列

来自分类Dev

由中级签名的证书显示为自签名证书

来自分类Dev

为日期的开始和结束创建DateTime字符串

来自分类Dev

日期减去日期查询

来自分类Dev

日期减去日期查询

来自分类Dev

减去日期Javascript

来自分类Dev

Sqlcmd 减去日期

来自分类Dev

根据日期将项目添加到两个数组(未来日期和过去日期)中

来自分类Dev

为单个 VirtualHosts 设置自签名证书

来自分类Dev

尝试创建将来的日期,而不是创建过去的日期

来自分类Dev

如何创建自签名SSL证书?

来自分类Dev

如何创建自签名SSL证书?

来自分类Dev

创建自签名证书 - ./makecert 使用 powershell

来自分类Dev

Windows:如何创建自签名根证书以及使用自签名根证书签名的自签名证书

来自分类Dev

moment.js-更改已经格式化的过去日期的格式

Related 相关文章

  1. 1

    创建过去日期为结束日期的自签名证书

  2. 2

    如何禁用daterangepicker中的过去日期?

  3. 3

    禁用FullCalendar中的过去日期下降

  4. 4

    如何禁用daterangepicker中的过去日期?

  5. 5

    如果我无法在模型中禁止使用过去日期创建对象,如何在Rails上使用RSpec过去日期进行测试?

  6. 6

    生成带有开始和结束日期的签名证书

  7. 7

    如何找到过去日期以后n天的日期?

  8. 8

    在日期列表中查找最接近的过去日期

  9. 9

    OpenSSL自签名根CA证书:设置开始日期

  10. 10

    在SQL Server上获取最近的过去日期值

  11. 11

    输出过去日期和今天之间的时间php

  12. 12

    文件创建日期如何是过去的日期?

  13. 13

    如何在引导日期时间选择器中禁用今天的过去日期?

  14. 14

    如何在Eonasdan引导程序datetimepicker中禁用日期范围的过去日期?

  15. 15

    MySQL选择从给定日期起大于或等于最近的过去日期的列

  16. 16

    由中级签名的证书显示为自签名证书

  17. 17

    为日期的开始和结束创建DateTime字符串

  18. 18

    日期减去日期查询

  19. 19

    日期减去日期查询

  20. 20

    减去日期Javascript

  21. 21

    Sqlcmd 减去日期

  22. 22

    根据日期将项目添加到两个数组(未来日期和过去日期)中

  23. 23

    为单个 VirtualHosts 设置自签名证书

  24. 24

    尝试创建将来的日期,而不是创建过去的日期

  25. 25

    如何创建自签名SSL证书?

  26. 26

    如何创建自签名SSL证书?

  27. 27

    创建自签名证书 - ./makecert 使用 powershell

  28. 28

    Windows:如何创建自签名根证书以及使用自签名根证书签名的自签名证书

  29. 29

    moment.js-更改已经格式化的过去日期的格式

热门标签

归档