当我们重新使用之前保存的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/