更改openssl自签名证书的开始和结束日期

时间:2019-01-24 17:11:12

标签: openssl

我有这三个语句来生成具有我自己的根证书的自签名证书。

openssl genrsa -out domain.org.key
openssl req -newkey rsa:2048 -nodes -keyout domain.org.key -subj "/C=CN/ST=GD/L=SZ/O=Acme, Inc./CN=*.domain.org" -out domain.org.csr
openssl x509 -req -extfile <(printf "subjectAltName=DNS:domain.org,DNS:www.domain.org") -days 1 -in domain.org.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out domain.org.crt

但是,在此期间,有效期只能更改一天。有谁知道我是否可以添加一个参数,让我将开始日期和结束日期更改为秒或分钟的粒度。为了进行测试,我需要创建几个证书,其有效期仅需几分钟。我查看了其他答案,他们建议使用ca命令:

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

但是我不确定如何将两者结合起来,因为第二个命令似乎只是为域生成密钥。任何人都可以帮助组合这两个命令,或者以其他方式更改证书时间,而无需更改我的系统时间。

1 个答案:

答案 0 :(得分:1)

openssl命令行不提供用于设置“ x509 -req”选项的开始和结束日期的命令行选项。

如果确实需要执行此操作,则可以修改openssl源代码以执行所需的操作。

在app \ req.c中,您需要修改“ set_cert_times”调用:

    if (days == 0) {
        /* set default days if it's not specified */
        days = 30;
    }
    if (!set_cert_times(x509ss, NULL, NULL, days))
        goto end;

int set_cert_times(X509 *x, const char *startdate, const char *enddate,
                   int days)

如果提供开始日期和结束日期,它将覆盖days参数,因此您可以执行以下操作:

if (!set_cert_times(x509ss, "0801010000Z", "1001010000Z", days))
    goto end;

这将对开始日期和结束日期进行硬编码,或者通过做更多的工作,您可以在x509 -req处理中添加对-startdate和-enddate参数的支持。