c - 缓存的 SSL session 是否包含以前的 X.509 证书信息?

标签 c ssl openssl libressl session-cache

当我们重新使用之前保存的SSL_SESSION时, 重用的 SSL session 是否具有原始 X.509 对等证书?

我的代码很少崩溃,调查显示 SSL session 被重用,peer cert(certinfo->key->pkey) 的一些字段被弄乱了。

  • 从 CLT 到 SVR 的第一次握手。

    SVR 将 X.509 证书发送给 CLT,CLT 存储该证书。 我们可以使用 SSL_get_peer_certificate() 获取证书。 CLT 使用 SSL_get1_session() 保存 SSL_SESSION

  • 从 CLT 到 SVR 的第二次握手。

    这次 CLT 使用 SSL_set_session() 提供保存的 SSL_SESSION 并发生了简短的握手。 当CLT调用SSL_get_peer_certificate()时,CLT能否获取到原始证书 X.509 证书?

似乎与 SSL_SESSION 和包含的对等 X.509 证书的耦合是松散的。除了调用 SSL_get1_session 之外,我们是否应该显式保存带有 upping refcnt 的 X.509 对等证书,以便在重用的 SSL_SESSION 上正确使用 SSL_get_peer_certificate()

我在 Linux 上使用 LibreSSL 和 OpenSSL。

如有任何意见,我们将不胜感激。

最佳答案

如果您查看 openssl 代码,您会在 SSL_SESSION 的声明中找到此注释,它说:

/* This is the cert for the other end.
 * On clients, it will be the same as sess_cert->peer_key->x509
 * (the latter is not enough as sess_cert is not retained
 * in the external representation of sessions, see ssl_asn1.c). */
X509 *peer;

我假设它向客户端表明,当转换为外部表示时,对等证书不会保留,即当 SSL_SESSION 被序列化时,对等证书将丢失

关于c - 缓存的 SSL session 是否包含以前的 X.509 证书信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50250491/

相关文章:

c - 声明 'volatile' 数据类型供线程使用

ssl - Windows Chef 添加 ssl 证书并绑定(bind)到 IIS

不接受 SSL 证书

java - 连接到 MySQL 数据库时有关 SSL 连接的警告

android - Qt for Android 和 BoringSSL

python - 通过 python virtualenvwrapper 链接到 brew openssl

c++ - 捕捉信号并向用户报告问题的便携方式

检查c中的shell命令返回值

c++ - C指针指向包含对齐的C结构的C++类的对齐问题

ssl - 如何在 redbird 代理服务器上续订 ssl 证书