Openssl C++获取证书过期日期

6

我应该使用哪个函数来获取x509证书的到期日期?首先我会检查证书的有效性。如果它已经过期,我需要获取证书的到期日期。

2个回答

8

编辑:在使用“Forever”之前,您应该按照以下步骤执行X509_get_notAfter和X509_get_notBefore。

要转换ASN1_TIME,可以使用在asn1.h中声明的ASN1_TIME_print()例程。

这将完成任务:

BIO *bio;
int write = 0;
bio = BIO_new(BIO_s_mem());
if (bio) {
    if (ASN1_TIME_print(bio, tm))
        write = BIO_read(bio, buf, len-1);
    BIO_free(bio);
}
buf[write]='\0';
return write;

1
是的..分配足够的内存来容纳格式为"YYMMDDHHMMSS"的字符串,或者可能多一点以确保安全。 - Raj
如果我没有 BIO,该如何实现这个?请参见 https://dev59.com/nHPYa4cB1Zd3GeqPkpb1 - eckes
谢谢!在折腾了两天之后,终于找到了这个解决方法。我在这里整理了一个要点摘要:https://gist.github.com/raakasf/1853039e7c4dd19fbde397e9d7ccc83c,还有一个相关问题的答案:https://stackoverflow.com/questions/23407376/testing-x509-certificate-expiry-date-with-c - undefined

7

他们返回什么?难道它们不仅测试当前证书是否在当前日期之前或之后有效吗? - Prasanth Madhavan
@PrasanthMadhavan 他们返回的是ANS1_TIME*。请查看x509.h头文件。 - ForEveR
请注意,这些宏期望xX509 *类型。 - atomicinf
3
这些宏在1.1.0h版本中已不再有效。如果您能更新到现代API版本,那就太好了。 const ASN1_TIME *before = X509_get0_notBefore( x509 ); const ASN1_TIME *after = X509_get0_notAfter( x509 ); - J Decker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接