当我们重新使用之前保存的SSL_SESSION
时,
重用的SSL会话是否具有orignal X.509对等证书?
我的代码很少崩溃,调查显示
重用SSL会话,并且对等证书(certinfo->key->pkey
)的某些字段搞砸了。
从CLT到SVR的第一次握手。
SVR将X.509证书发送到CLT,CLT存储证书。
我们可以使用SSL_get_peer_certificate()
获取证书。
CLT使用SSL_SESSION
保存SSL_get1_session()
。
从CLT到SVR的第二次握手。
这次CLT通过SSL_SESSION
提供了保存的SSL_set_session()
和缩写握手发生。
当CLT调用SSL_get_peer_certificate()
时,CLT可以获得原始版本
X.509证书?
似乎与SSL_SESSION
和包含的对等X.509证书的耦合是松散的。除了仅调用SSL_get1_session
之外,我们是否应该明确地使用upping refcnt保存X.509对等证书,以便在重用的SSL_get_peer_certificate()
上正确使用SSL_SESSION
?
我在Linux上使用LibreSSL和OpenSSL。
任何评论都会深深感激。
答案 0 :(得分:0)
如果您看到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被序列化时,对等证书将丢失