如何从SSL_CTX获取证书?

6

我使用SSL_CTX_use_certificate( SSL_CTX *ctx, X509 *x )将证书存储到SSL_CTX *ctx中。

它被存储在SSL_CTX对象的ctx->cert->key->x509处。

是否有API可以从SSL_CTX获取?

2个回答

3

虽然这个问题有点老,但我还是在这里发布一下,供大家参考,因为我花了几个小时才解决这个问题。

以下是从 SSL_CTX* 获取证书,并检查该证书剩余有效天数(和秒数)的示例:

X509 *x509 = SSL_CTX_get0_certificate(ssl_ctx);
const ASN1_TIME* notAfter = X509_getm_notAfter(x509);
int remaining_days=0, remaining_seconds = 0;
int  result = ASN1_TIME_diff(&remaining_days, &remaining_seconds, NULL, notAfter);
std::cout << "remaining days: " << remaining_days << std::endl;
std::cout << "remaining seconds: " << remaining_seconds << std::endl;

此处使用的是OpenSSL 1.1版本。


0

X509 *SSL_get_peer_certificate(const SSL *ssl); SSL_get_peer_certificate() 函数返回指向对等方提供的 X509 证书的指针。

X509 *SSL_get_certificate(const SSL *ssl); 该函数返回一个指向 SSL 结构中加载的证书的 X.509 类型指针。

上述内容的定义就像你在答案中提到的那样简单。

X509 *SSL_get_certificate(const SSL *s)
{
    if (s->cert != NULL)
        return(s->cert->key->x509);
    else
        return(NULL);
}

以下是更多信息的参考链接 https://www.openssl.org/docs/manmaster/ssl/ssl.html

1
但我正在处理上下文级别...这是您提供的连接对象。 - user5023960
这不是微不足道的吗?您已经有了SSL_ctx对象和x509 *证书所在的索引,为什么还需要API呢?另一方面,SSL会话对象可以从SSl_ctx对象中获取证书。 - cmidi

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